我有一個自定義異常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;
}
我有這個全局註冊在我的FilterConfig.cs
public static class FilterConfig
{
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters?.Add(new ExceptionLoggingFilterAttribute());
}
}
我也有我的Global.asax中聲明的Application_Error事件。 CS
protected void Application_Error(object sender, EventArgs e)
{
var exception = Server.GetLastError();
// some exception logging code (not shown)
}
- 時候會異常過濾器代碼被擊中時WIL l它會直接轉到Application_Error方法中的全局錯誤處理程序? (我理解ExceptionHandled概念,並認識到通過將其標記爲在我的過濾器中處理,它將不會級聯到全局錯誤處理程序)。
我認爲會觸發過濾器的一個異常 - 404的HttpException不會觸發過濾器,但會在應用程序錯誤處理程序中被捕獲。
- 我已經看到一些代碼示例,其中人們使用global.asax.cs中的HttpContext.Current對特定的錯誤視圖執行Server.TransferRequest。這是最佳做法嗎?使用web.config的system.web部分中的CustomErrors部分會更好嗎?