Ubah web.config secara terprogram dengan C # (.NET)

93

Bagaimana saya bisa memodifikasi / memanipulasi secara web.configterprogram dengan C #? Dapatkah saya menggunakan objek konfigurasi, dan, jika ya, bagaimana cara memuatnya web.configke dalam objek konfigurasi? Saya ingin contoh lengkap mengubah string koneksi. Setelah modifikasi, web.configharus ditulis kembali ke harddisk.

Kottan
sumber
Periksa posting blognya tentang cara memanipulasi web.config secara terprogram di ASP.NET 2.0 dan ASP.NET 3.5 Atau periksa pertanyaan ini yang memiliki jawaban untuk pertanyaan Anda. Bagaimana cara menyetel konfigurasi string koneksi secara terprogram di .net?
Shoban

Jawaban:

115

Ini dia beberapa kode:

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

Lihat lebih banyak contoh dalam artikel ini , Anda mungkin perlu melihat ke peniruan .

Alex LE
sumber
Apa nama string koneksi Anda di file web.config?
Alex LE
tautan ke artikel rusak
Vitall
@AlexLE: Bagaimana kami menentukan lokasi file ketika web.config ditempatkan di lokasi yang berbeda. Mungkin server jarak jauh di jalur bersama?
SharpCoder
@SharpCoder, jalurnya adalah jalur virtual, jadi Anda harus menyalin web.config dari server jarak jauh ke aplikasi lokal Anda terlebih dahulu (di dalam folder temp agar tidak menimpa web.config Anda sendiri), edit, simpan, lalu salin kembali ke server jauh. Atau solusi yang lebih baik dan lebih kompleks adalah: buat API yang melakukan de pekerjaan (ubah de web.config), terapkan ke server jarak jauh dan kemudian gunakan dari server lokal.
Guilherme Branco Stracini
@Skami Anda harus menyetel nama connectionStrings ke "MyConnectionString" yang berarti bagian. Nilai ConnectionStrings ["MyConnectionString"] harus cocok dengan nama.
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();
ASergan
sumber
Bagaimana cara mendapatkan ID Pengguna dari variabel bagian?
Niks
5

Karena file web.config adalah file xml Anda dapat membuka web.config menggunakan kelas xmldocument. Dapatkan node dari file xml yang ingin Anda perbarui dan kemudian simpan file xml.

berikut adalah URL yang menjelaskan lebih detail bagaimana Anda dapat memperbarui file web.config secara terprogram.

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

Catatan: jika Anda membuat perubahan apa pun pada web.config, ASP.NET mendeteksi perubahan itu dan itu akan memuat ulang aplikasi Anda (mendaur ulang kumpulan aplikasi) dan efeknya adalah data yang disimpan dalam Sesi, Aplikasi, dan Cache akan hilang (dengan asumsi status sesi adalah InProc dan tidak menggunakan server negara atau database).

shailesh
sumber
Saya tahu bahwa secara teknis mungkin, saya pikir metode yang disetujui / disetujui oleh Microsoft kemungkinan akan lebih tahan lama dan tidak terlalu merusak web.config. Kami telah memperbarui semua file ini "dengan tangan", tetapi menurut saya ini berisiko dengan server web produksi. Hanya 2c saya.
Anthony Horne
2

Ini adalah metode yang saya gunakan untuk memperbarui AppSettings, berfungsi untuk aplikasi web dan desktop. Jika Anda perlu mengedit connectionStrings Anda bisa mendapatkan nilai itu dari System.Configuration.ConnectionStringSettings config = configFile.ConnectionStrings.ConnectionStrings["YourConnectionStringName"];dan kemudian menetapkan nilai baru dengan config.ConnectionString = "your connection string";. Perhatikan bahwa jika Anda memiliki komentar di connectionStringsbagian Web.Configini akan dihapus.

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);
}
Ogglas
sumber
Kode ini bagus dan saya memberikan suara positif, tetapi tidak akan berfungsi jika appSettings ditentukan di file lain, seperti misalnya: <appSettings file = "C: \ Client \ customSettings.config"> </appSettings>
Ben Junior