は、私は次のようなカスタム例外FilterAttributeを持っている:MVC ExceptionFilterはいつ実行されるのですか?アプリケーションレベルのエラーハンドラはいつですか?
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = true)]
public sealed class ExceptionLoggingFilterAttribute : FilterAttribute, IExceptionFilter
{
public void OnException(ExceptionContext filterContext)
{
if (filterContext == null)
{
throw new ArgumentNullException(nameof(filterContext));
}
if (filterContext.ExceptionHandled)
{
return;
}
// some exception logging code (not shown)
filterContext.ExceptionHandled = true;
}
私は、この私も自分のglobal.asaxで宣言されたのApplication_Errorメソッドを持っている私のFilterConfig.cs
public static class FilterConfig
{
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters?.Add(new ExceptionLoggingFilterAttribute());
}
}
でグローバルに登録されています。 CS
例外フィルタコードがヒットし、WILされますprotected void Application_Error(object sender, EventArgs e)
{
var exception = Server.GetLastError();
// some exception logging code (not shown)
}
- それはApplication_Errorメソッドのグローバルエラーハンドラにまっすぐに行きますか? (私はExceptionHandledのコンセプトを理解し、フィルタで処理されたときにグローバルエラーハンドラにカスケードされないことをマークすることで実現します)。
- 私は、人々が特定のエラービューに対してServer.TransferRequestを実行するためにglobal.asax.csのHttpContext.Currentを使用するコードサンプルをいくつか見てきました。これはベストプラクティスですか? web.configのsystem.webセクションのCustomErrorsセクションを使用する方が良いでしょうか?
私がフィルタにヒットしたと考えられる例外 - 404のHttpExceptionはフィルタにヒットせず、アプリケーションエラーハンドラで捕捉されます。