2013-05-27 32 views
15

Witam mam setup ELMAH w moim projekcie, ale otrzymuję błędy dużo jakELMAH zalogować sposób zignorować błąd według typu

System.Web.HttpException: potencjalnie niebezpiecznych wartości Request.Path wykryto od klienta (:).

Generated: Sun, 26 maja 2013 21:46:30 GMT

System.Web.HttpException (0x80004005): Potencjalnie niebezpieczne wartość Request.Path wykryto od klienta (:). w System.Web.HttpRequest.ValidateInputIfRequiredByConfig() w System.Web.HttpApplication.PipelineStepManager.ValidateHelper (HttpContext kontekstowego)

chciałbym je ignorować, a nie wysyłać do mojej poczty, ale pisać w ELMAH DB. Czy można to zrobić?

Odpowiedz

19

Tak, można to zrobić za pomocą error filtering w programie ELMAH, a numer described in detail on the project wiki. W skrócie, po filtr w web.config powinien wykonać zadanie (zakładając, że masz już konfiguracji sekcje konfiguracyjne modułów):

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

Pierwszy <regex> stan filters based on the filtering source takie, że mailing nie nastąpi. Check out the documentation on the wiki for full details.

+0

nie mogę zatrzymaj wysyłanie "System.InvalidOperationException: żądany zasób jest dostępny tylko przez SSL." Mój wzór jest:

+1

@RhysStephens ci mają mieć jeden' ​​ 'węzeł, więc drugi jest ignorowany. Musisz '' razem 404 i wzorce komunikatów, a następnie '', które wraz ze skrzynką źródłową poczty. Dlaczego nie zamieścisz go tutaj jako innego pytania na SO lub w [ELMAH Discussion Group] (http://groups.google.com/group/elmah), a my możemy to zrobić? –

14

Rozwiązanie, które nie wymaga wyrażenia regularne, wystarczy dodać do swoich Global.asax.cs:

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

Czy można połączyć te dwie metody:

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

Jest to przeciwieństwo tego, o co pyta w mojej bazie kodów. Nadal wysyłam wiadomość e-mail, ale nie loguję się do bazy danych. – Marc

+0

Właśnie tego szukałem, dzięki. – webnoob

+1

Istnieją dwie funkcje, jedna do filtrowania z dziennika, a druga do filtrowania wiadomości e-mail. Musisz użyć funkcji ErrorMail_Filtering, a nie ErrorLog_Filtering, aby usunąć z wiadomości e-mail, zgodnie z https://code.google.com/p/elmah/wiki/ErrorFiltering – AaronM