2013-06-16 23 views
5

Tôi đang sử dụng ELMAH trong dự án mvc của tôi để ghi lại lỗi. Tôi nhận ra rằng đôi khi các lỗi không được ghi lại. Vì vậy, tôi bọc các câu lệnh trong try..catch và gọi là ErrorSignal.FromCurrentContext().Raise(ex); nhưng không có gì được ghi lại cho lỗi cụ thể đó. Vì vậy, tôi đã cố gắng để bước vào mã nguồn ELMAH (sử dụng Reflector VS addin). Và tôi thấy ngoại lệ này trong ELMAH:Lỗi không được ghi trong ELMAH

A potentially dangerous Request.Form value was detected from the client (Text="<br>"). 
StackTrace: at System.Web.HttpRequest.ValidateString(String value, String collectionKey, RequestValidationSource requestCollection) 

mã nguồn thực tế: this._form = CopyCollection(request.Form); trong public Error(System.Exception e, HttpContext context) trong Error.cs. và phương pháp CopyCollection:

private static NameValueCollection CopyCollection(NameValueCollection collection) 
{ 
    if ((collection != null) && (collection.Count != 0)) 
    { 
     return new NameValueCollection(collection); 
    } 
    return null; 
} 

Vì vậy Net không cho phép tạo NameValueCollection mới từ nguy hiểm dữ liệu mẫu. Tôi có rất nhiều trình soạn thảo Html trong ứng dụng của mình và tôi muốn ELMAH ghi lại các lỗi trong mọi tình huống.

Tôi có thể làm gì?

Trả lời

3

Thật không may, this is due to a breaking change introduced by ASP.NET 4.0. Một cách giải quyết ngay bây giờ sẽ được yêu cầu ASP.NET để quay trở lại hành vi cũ bằng cách thêm dòng sau vào cấu hình của bạn:

<httpRuntime requestValidationMode="2.0" /> 

Đối với một thảo luận đầy đủ hơn, hãy xem issue #217 trên ELMAH project site.

+2

Tôi nhận thấy rằng vấn đề # 217 đã được sửa vào tháng 9 năm 2012. Có kế hoạch phát hành phiên bản mới của Elmah không? –

+1

@AtifAziz PLUSONE! Xin vui lòng đẩy vào nuget? Điều này đã được vá năm trước ... Nếu vấn đề là một trong những nhu cầu khuôn khổ> = 4 thì có lẽ có thể có một gói v4 nuget? –