Thay đổi web.config theo chương trình bằng C # (.NET)


93

Làm cách nào để tôi có thể sửa đổi / thao tác web.configlập trình với C #? Tôi có thể sử dụng đối tượng cấu hình không, và nếu có, tôi có thể tải web.configđối tượng cấu hình như thế nào? Tôi muốn có một ví dụ đầy đủ về việc thay đổi chuỗi kết nối. Sau khi sửa đổi, web.configsẽ được ghi lại vào đĩa cứng.


Kiểm tra bài đăng trên blog của anh ấy về cách thao tác lập trình web.config trong ASP.NET 2.0 và ASP.NET 3.5 Hoặc kiểm tra câu hỏi này có câu trả lời cho câu hỏi của bạn. Làm cách nào để đặt cấu hình chuỗi kết nối theo chương trình trong .net?
Shoban

Câu trả lời:


115

Đây là một số mã:

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

Xem thêm các ví dụ trong bài viết này , bạn có thể cần phải xem xét mạo danh .


Tên chuỗi kết nối của bạn trong tệp web.config là gì?
Alex LE

liên kết đến bài viết bị hỏng
Vitall

@AlexLE: Làm cách nào để chúng tôi chỉ định vị trí tệp khi web.config được đặt ở một vị trí khác. Có thể là một máy chủ từ xa trên một đường dẫn chia sẻ?
SharpCoder

@SharpCoder, đường dẫn là một đường dẫn ảo, vì vậy trước tiên bạn cần sao chép web.config từ máy chủ từ xa vào ứng dụng cục bộ của bạn (bên trong thư mục tạm thời để không ghi đè web.config của riêng bạn), chỉnh sửa, lưu và sau đó sao chép lại đến máy chủ từ xa. Hoặc một giải pháp tốt hơn, phức tạp hơn sẽ là: tạo một API thực hiện công việc (change de web.config), triển khai nó đến máy chủ từ xa và sau đó sử dụng nó từ máy chủ cục bộ.
Guilherme Branco Stracini

@Skami bạn phải được đặt tên connectionString thành "MyConnectionString" có nghĩa là giá trị section.ConnectionStrings ["MyConnectionString"] phải khớp với tên.
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();

Làm cách nào để lấy ID người dùng từ biến phần?
Niks

5

Vì tệp web.config là tệp xml nên bạn có thể mở web.config bằng cách sử dụng lớp xmldocument. Lấy nút từ tệp xml mà bạn muốn cập nhật, sau đó lưu tệp xml.

đây là URL giải thích chi tiết hơn cách bạn có thể cập nhật tệp web.config theo chương trình.

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

Lưu ý: nếu bạn thực hiện bất kỳ thay đổi nào đối với web.config, ASP.NET sẽ phát hiện những thay đổi đó và nó sẽ tải lại ứng dụng của bạn (nhóm ứng dụng tái chế) và ảnh hưởng của điều đó là dữ liệu được giữ trong Phiên, Ứng dụng và Bộ nhớ cache sẽ bị mất (giả sử trạng thái phiên là InProc và không sử dụng máy chủ hoặc cơ sở dữ liệu trạng thái).


Tôi biết rằng về mặt kỹ thuật là có thể thực hiện được, tôi nghĩ rằng phương pháp được Microsoft chấp thuận / chấp thuận có thể sẽ tồn tại lâu hơn và ít bị phá vỡ web.config hơn. Tất cả chúng tôi đã cập nhật các tệp này "bằng tay", nhưng tôi nghĩ rằng điều đó rất rủi ro với các máy chủ web sản xuất. Chỉ là 2c của tôi.
Anthony Horne

2

Đây là một phương pháp mà tôi sử dụng để cập nhật AppSettings, hoạt động cho cả ứng dụng web và máy tính để bàn. Nếu bạn cần chỉnh sửa các System.Configuration.ConnectionStringSettings config = configFile.ConnectionStrings.ConnectionStrings["YourConnectionStringName"];chuỗi kết nối, bạn có thể lấy giá trị đó từ đó và sau đó đặt giá trị mới với config.ConnectionString = "your connection string";. Lưu ý rằng nếu bạn có bất kỳ nhận xét nào trong connectionStringsphần Web.Confignày sẽ bị xóa.

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);
}

Mã này tốt và tôi đã ủng hộ nó, nhưng nó sẽ không hoạt động nếu appSettings được xác định trong một tệp khác, chẳng hạn như: <appSettings file = "C: \ Client \ customSettings.config"> </appSettings>
Ben Junior
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.