2010-08-24 20 views
8

Làm cách nào để lấy giá trị của thuộc tính errorMode được đặt trong phần tử <system.webServer><httpErrors> trong web.config?Kiểm tra httpErrors errorMode programmatically

Tôi đang cố triển khai một số "tự chẩn đoán" trong ứng dụng web ASP.NET. Khi ứng dụng bắt đầu, nó chạy qua một số cài đặt trong web.config và xác nhận chúng được đặt chính xác.

Trong khi mã này hoạt động khá độc đáo khi errormode được thiết lập trong các yếu tố <system.web><customErrors>,

var errSec = (CustomErrorsSection)HttpContext.Current.GetSection("system.web/customErrors"); 
Response.Write(errSec.Mode.ToString()); 

nó sẽ không hoạt động khi trang web được triển khai trên IIS7 và thiết lập này ngay bây giờ được tìm thấy trong system.webServer -> httpErrors.

này sẽ không làm việc:

var errSec = (CustomErrorsSection)HttpContext.Current.GetSection("system.webServer/httpErrors"); 

Và đúc đến một CustomErrorsSection cũng có vẻ như một ý tưởng tồi, thì phải có một loại tốt hơn để sử dụng không?

Tôi tìm thấy bài viết này trên IIS.NET, HTTP Errors, nhưng tôi hy vọng sẽ làm điều này mà không có sự phụ thuộc vào thư viện Microsoft.Web.Administration.

Mọi đề xuất ??

CẬP NHẬT

Okay, dựa trên gợi ý dưới đây, tôi đã cố gắng này:

var errSec = (ConfigurationSection)HttpContext.Current.GetSection("system.webServer/httpErrors"); 
Response.Write(errSec.SectionInformation.GetRawXml().ToString()); 

Nhưng điều đó không làm việc, hoặc, đối tượng errSec là null. Và trên một lưu ý phụ, nếu tôi tải phần <system.web><customErrors> bằng cách sử dụng cùng một cách tiếp cận, cuộc gọi phương thức GetRawXml() không thành công với "Thao tác này không áp dụng khi chạy". thông báo ngoại lệ.

Tôi biết cách tải toàn bộ web.config dưới dạng tệp xml và truy vấn để truy cập phần tử tôi cần. Nhưng có vẻ như tôi phải có một cách tiếp cận thanh lịch hơn.

Làm thế nào để đọc web.config như xml:

var conf = XDocument.Load(System.Web.Hosting.HostingEnvironment.ApplicationPhysicalPath + "web.config"); 
var errMode = conf.Root.Element("system.webServer").Element("httpErrors").Attribute("errorMode").Value; 

... nhưng đó chỉ là khó chịu! Và nếu thiết lập errorMode được đặt trong machine.config hoặc tương tự, nó sẽ không hoạt động.

Trả lời

0

(CustomErrorsSection)HttpContext.Current.GetSection("system.webServer/httpErrors") sẽ không hoạt động vì phần đó là từ cấu hình IIS7 schema và không giống như CustomErrorsSection (từ cấu hình ASP.NET). Nếu bạn không muốn phụ thuộc vào lắp ráp IIS7 (mà bạn không nên), cách duy nhất là sử dụng đối tượng ConfigurationSection để liệt kê thông qua các phần tử con của nó và nhận được mong muốn. Hoặc bạn có thể trực tiếp nhận tệp cấu hình, coi nó là một XML và đọc các giá trị cần thiết.

+0

Bạn luôn có thể sử dụng sự phản chiếu ;-) – Steven

+0

Vâng, tôi quên đề cập đến phương pháp "đọc dưới dạng xml" như một tùy chọn khác mà tôi muốn tránh. :) Tôi đã cố gắng để tải nó như là một ConfigurationSection, nhưng tôi không thể tìm ra cách để có được tài sản errorMode. Bất kỳ ý tưởng? –

Các vấn đề liên quan