2

私はこれを持っています

public class ExceptionFilter : IExceptionFilter
{
    public void OnException(ExceptionContext context)
    {
        Exception exception = context.Exception;
        if (!(exception is HttpException))
        {
           Trace.TraceError("ExceptionFilter: " + ExceptionUtilities.GetFullExceptionMessage(exception));
           Trace.Flush();
        }
    }
}

これはglobal.asaxにあります

public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
    filters.Add(new Filters.ExceptionFilter());
    filters.Add(new HandleErrorAttribute());
}

しかし、このような危険なリクエストを作成してエラーをトリガーすると

example.com/dsfgds:dfgd

例外があります:

潜在的に危険な Request.Path 値がクライアントから検出されました (:)

フィルターは起動せず、内部のブレークポイントはヒットしません。

4

1 に答える 1

2

これは、MVC で を登録しているためIExceptionFilterであり、MVC アクション内で発生した未処理の例外のみをキャプチャするためです (おそらく他の MVC フィルターだと思いますか? 引用しないでください)。しかし、潜在的に危険な要求に関するエラーは ASP.NET エラーであり、要求が MVC に送信されなかったため、MVC エラー フィルターが呼び出されることはありません。同様に、IIS レベルのエラーもこれでは処理されません。Application_OnErrorMVC 以外のエラーについては、引き続きイベントを監視する必要があります。または、Elmah のような例外ハンドラーの場合は、イベントを監視します。

于 2013-04-15T23:36:55.033 に答える