2013-05-27 19 views
15

Xin chào Tôi đã thiết lập ELMAH trong dự án của tôi, nhưng tôi nhận được một lỗi rất giốngELMAH đăng nhập như thế nào để bỏ qua lỗi theo loại

System.Web.HttpException: Một giá trị Request.Path nguy hiểm tiềm tàng được phát hiện từ máy khách (:).

tạo: Sun, 26 Tháng 5 2013 21:46:30 GMT

System.Web.HttpException (0x80004005): Một giá trị Request.Path nguy hiểm đã được phát hiện từ khách hàng (:). tại System.Web.HttpRequest.ValidateInputIfRequiredByConfig() tại System.Web.HttpApplication.PipelineStepManager.ValidateHelper (HttpContext bối cảnh)

Tôi muốn bỏ qua chúng, và không gửi vào mail của tôi, nhưng viết trong ELMAH DB. Có thể làm được không?

Trả lời

19

Có, bạn có thể thực hiện việc này bằng cách sử dụng error filtering trong ELMAH và là described in detail on the project wiki. Nói tóm lại, các bộ lọc sau trong web.config bạn nên thực hiện công việc (giả sử bạn đã thiết lập các phần cấu hình module đã được):

<errorFilter> 
    <test> 
     <and> 
      <regex binding="FilterSourceType.Name" pattern="mail" /> 
      <regex binding="Exception.Message" 
       pattern="(?ix: \b potentially \b.+?\b dangerous \b.+?\b value \b.+?\b detected \b.+?\b client \b)" /> 
     </and> 
    </test> 
</errorFilter> 

Điều kiện đầu tiên <regex>filters based on the filtering source như vậy mà chỉ gửi thư sẽ không xảy ra. Check out the documentation on the wiki for full details.

+0

tôi không thể làm cho nó ngừng gửi "System.InvalidOperationException: Tài nguyên được yêu cầu chỉ có thể được truy cập thông qua SSL." mô hình của tôi là:

+1

@RhysStephens Bạn có nghĩa vụ phải có một ' 'nút sao cho nút thứ hai bị bỏ qua. Bạn cần phải ' 'cùng với các trường hợp mẫu 404 và tin nhắn của bạn và sau đó là' ' cùng với trường hợp nguồn thư. Tại sao bạn không đăng nó như một câu hỏi khác ở đây trên SO hoặc trên [Nhóm thảo luận ELMA] (http://groups.google.com/group/elmah) và chúng tôi có thể lấy nó từ đó? –

14

Một giải pháp mà không liên quan đến biểu thức thông thường, chỉ cần thêm này để Global.asax.cs của bạn:

protected void ErrorMail_Filtering(object sender, ExceptionFilterEventArgs e) 
{ 
    if (e.Message == "A potentially dangerous Request.Path value was detected from the client (:).") 
     e.Dismiss(); 
} 

// this method may also be useful 
protected void ErrorLog_Filtering(object sender, ExceptionFilterEventArgs e) 
{ 
    if (e.Message == "A potentially dangerous Request.Path value was detected from the client (:).") 
    { 
     // do something 
    } 
} 

Hoặc bạn có thể kết hợp hai phương pháp:

void ErrorLog_Filtering(object sender, ExceptionFilterEventArgs args) 
{ 
    Filter(args); 
} 

void ErrorMail_Filtering(object sender, ExceptionFilterEventArgs args) 
{ 
    Filter(args); 
} 

void Filter(ExceptionFilterEventArgs args) 
{ 
    if (args.Exception.GetBaseException() is HttpRequestValidationException) 
     args.Dismiss(); 
} 
+0

Điều này ngược lại với câu hỏi trong codebase của tôi. Tôi vẫn gửi email nhưng không đăng nhập vào cơ sở dữ liệu. – Marc

+0

Chỉ là những gì tôi đang tìm kiếm, cảm ơn. – webnoob

+1

Có hai chức năng, một để lọc từ nhật ký và một chức năng khác để lọc email. Cần phải sử dụng chức năng ErrorMail_Filtering không ErrorLog_Filtering để loại bỏ khỏi email, theo https://code.google.com/p/elmah/wiki/ErrorFiltering – AaronM

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