เปลี่ยน web.config โดยใช้โปรแกรม C # (.NET)


93

ฉันจะแก้ไข / จัดการweb.configโปรแกรมด้วย C # ได้อย่างไร? ฉันสามารถใช้ออบเจ็กต์คอนฟิกูเรชันได้หรือไม่และถ้าใช่ฉันจะโหลดweb.configลงในอ็อบเจ็กต์คอนฟิกูเรชันได้อย่างไร ฉันต้องการตัวอย่างเต็มรูปแบบการเปลี่ยนสตริงการเชื่อมต่อ หลังจากแก้ไขแล้วweb.configควรเขียนกลับไปที่ฮาร์ดดิสก์


ตรวจสอบบล็อกโพสต์ของเขาเกี่ยวกับวิธีจัดการ web.config โดยทางโปรแกรมใน ASP.NET 2.0 และ ASP.NET 3.5หรือตรวจสอบคำถามนี้ซึ่งมีคำตอบสำหรับคำถามของคุณ ฉันจะกำหนดค่าสตริงการเชื่อมต่อโดยใช้โปรแกรมใน. net ได้อย่างไร
Shoban

คำตอบ:


115

นี่คือรหัสบางส่วน:

var configuration = WebConfigurationManager.OpenWebConfiguration("~");
var section = (ConnectionStringsSection)configuration.GetSection("connectionStrings");
section.ConnectionStrings["MyConnectionString"].ConnectionString = "Data Source=...";
configuration.Save();

ดูตัวอย่างเพิ่มเติมในบทความนี้คุณอาจต้องดูการแอบอ้างบุคคลอื่น


ชื่อสตริงการเชื่อมต่อของคุณในไฟล์ web.config คืออะไร
Alex LE

ลิงก์ไปยังบทความเสีย
Vitall

@AlexLE: เราจะระบุตำแหน่งไฟล์ได้อย่างไรเมื่อวาง web.config ไว้ที่ตำแหน่งอื่น อาจเป็นเซิร์ฟเวอร์ระยะไกลบนเส้นทางที่ใช้ร่วมกัน?
SharpCoder

@SharpCoder พา ธ เป็นพา ธ เสมือนดังนั้นก่อนอื่นคุณต้องคัดลอก web.config จากเซิร์ฟเวอร์ระยะไกลไปยังแอปพลิเคชันภายในของคุณ (ภายในโฟลเดอร์ชั่วคราวเพื่อไม่ให้แทนที่ web.config ของคุณเอง) แก้ไขบันทึกแล้วคัดลอกกลับ ไปยังเซิร์ฟเวอร์ระยะไกล หรือวิธีแก้ปัญหาที่ซับซ้อนและดีกว่าคือสร้าง API ที่ทำหน้าที่ (เปลี่ยน de web.config) ปรับใช้กับเซิร์ฟเวอร์ระยะไกลแล้วใช้จากเซิร์ฟเวอร์ภายใน
Guilherme Branco Stracini

@Skami คุณต้องตั้งชื่อ connectionStrings เป็น "MyConnectionString" ซึ่งหมายถึง section.ConnectionStrings ["MyConnectionString"] ค่าควรตรงกับชื่อ
Liakat

12
Configuration config = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration("~");
ConnectionStringsSection section = config.GetSection("connectionStrings") as ConnectionStringsSection;
//section.SectionInformation.UnprotectSection();
section.SectionInformation.ProtectSection("DataProtectionConfigurationProvider");
config.Save();

จะรับ ID ผู้ใช้จากตัวแปรส่วนได้อย่างไร
Niks

5

เนื่องจากไฟล์ web.config เป็นไฟล์ xml คุณสามารถเปิด web.config โดยใช้คลาส xmldocument รับโหนดจากไฟล์ xml ที่คุณต้องการอัปเดตจากนั้นบันทึกไฟล์ xml

นี่คือ URL ที่อธิบายรายละเอียดเพิ่มเติมเกี่ยวกับวิธีการอัปเดตไฟล์ web.config โดยทางโปรแกรม

http://patelshailesh.com/index.php/update-web-config-programmatically

หมายเหตุ: หากคุณทำการเปลี่ยนแปลงใด ๆ กับ web.config ASP.NET จะตรวจพบการเปลี่ยนแปลงนั้นและจะโหลดแอปพลิเคชันของคุณซ้ำ (recycle application pool) และผลของข้อมูลที่เก็บไว้ใน Session, Application และ Cache จะหายไป (โดยถือว่าสถานะเซสชัน เป็น InProc และไม่ได้ใช้เซิร์ฟเวอร์สถานะหรือฐานข้อมูล)


ฉันรู้ว่ามันเป็นไปได้ในทางเทคนิคฉันคิดว่าวิธีการตามทำนองคลองธรรม / อนุมัติโดย Microsoft นั้นน่าจะใช้งานได้นานกว่าและอาจมีน้อยกว่าที่จะทำลาย เราอัปเดตไฟล์เหล่านี้ "ด้วยมือ" ทั้งหมดแล้ว แต่ฉันคิดว่ามันมีความเสี่ยงกับเว็บเซิร์ฟเวอร์ที่ใช้งานจริง แค่ 2c ของฉัน
Anthony Horne

2

นี่เป็นวิธีที่ฉันใช้ในการอัปเดต AppSettings ใช้ได้กับทั้งแอปพลิเคชันบนเว็บและเดสก์ท็อป หากคุณจำเป็นต้องแก้ไข connectionStrings คุณจะได้รับค่าจากที่แล้วตั้งค่าใหม่ด้วยSystem.Configuration.ConnectionStringSettings config = configFile.ConnectionStrings.ConnectionStrings["YourConnectionStringName"]; config.ConnectionString = "your connection string";โปรดทราบว่าหากคุณมีความคิดเห็นใด ๆ ในconnectionStringsส่วนWeb.Configนี้จะถูกลบออก

private void UpdateAppSettings(string key, string value)
{
    System.Configuration.Configuration configFile = null;
    if (System.Web.HttpContext.Current != null)
    {
        configFile =
            System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration("~");
    }
    else
    {
        configFile =
            ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
    }
    var settings = configFile.AppSettings.Settings;
    if (settings[key] == null)
    {
        settings.Add(key, value);
    }
    else
    {
        settings[key].Value = value;
    }
    configFile.Save(ConfigurationSaveMode.Modified);
    ConfigurationManager.RefreshSection(configFile.AppSettings.SectionInformation.Name);
}

รหัสนี้ดีและฉันโหวตให้คะแนน แต่จะใช้ไม่ได้หากมีการกำหนด appSettings ในไฟล์อื่นเช่น: <appSettings file = "C: \ Client \ customSettings.config"> </appSettings>
Ben Junior
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.