2013-05-27 3 views
15

안녕 내 프로젝트에 설치 ELMAH를 가지고,하지만 난ELMAH는 유형에 따라 오류를 무시하는 방법 로그인

System.Web.HttpException처럼 많은 오류를 얻고있다 : 잠재적으로 위험한 Request.Path 값 은 감지되었습니다 클라이언트 (:).

생성 : 2013년 (일) 5월 26일 그리니치 표준시 21시 46분 30초

System.Web.HttpException (0X80004005) : 잠재적으로 위험한 Request.Path 값은 클라이언트 (:)에서 검출되었다. System.Web.HttpApplication.PipelineStepManager.ValidateHelper에서 System.Web.HttpRequest.ValidateInputIfRequiredByConfig() (HttpContext를 컨텍스트)에서

내가 그들을 무시하고 싶은, 내 메일을 보낼 수 있지만 쓰지 않는다 ELMAH DB에. 할 수 있습니까?

답변

19

예, ELMAH의 error filtering을 사용하면 described in detail on the project wiki입니다.

<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> 

첫 번째 <regex> 조건 메일 링이 발생하지 않을 것이라는 filters based on the filtering source 같은 : 즉, 귀하의 web.config에서 다음 필터는 작업 (이미 설치 모듈 구성 섹션이 가정을)해야한다. Check out the documentation on the wiki for full details.

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

또는이 두 가지 방법을 결합 할 수 있습니다 :

+0

을 그럴 수 없어 "System.InvalidOperationException : 요청한 리소스는 SSL을 통해서만 액세스 할 수 있습니다." 내 패턴이다 <동일한 바인딩 = "HttpStatusCode 「값 ="404 "TYPE ="INT32 "/> <정규식 결합 ="FilterSourceType.Name "패턴 ="메일 "/>

+1

@RhysStephens 당신은 ''노드에서 두 번째 노드가 무시됩니다. 당신은''와 404 & 메시지 패턴을 함께 사용해야하고,''을 메일 소스와 함께 사용해야합니다. SO 또는 [ELMAH 토론 그룹] (http://groups.google.com/group/elmah)에 다른 질문으로 게시하지 마시고 거기에서 받아 볼 수 있습니까? –

14

정규 표현식을 포함하지 않는 솔루션, 단순히 Global.asax.cs이 추가

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

이것은 내 코드베이스에서 질문하는 것과 반대입니다. 나는 여전히 이메일을 보내지 만 데이터베이스에 로그온하지는 않습니다. – Marc

+0

내가 뭘 찾고 있었는지, 고마워. – webnoob

+1

로그에서 필터링하고 전자 메일을 필터링하는 두 가지 기능이 있습니다. https://code.google.com/p/elmah/wiki/ErrorFiltering – AaronM

관련 문제