MVC與WebApi中的異常過濾器


一、MVC的異常過濾器

 
1、自定義MVC異常過濾器
創建一個類,繼承 HandleErrorAttribute即可,如果不需要作為特性使用直接實現 IExceptionFilter接口即可,
注意,該接口在 System.Web.Mvc  命名空間下
 
  1. /// <summary>
    /// 自定義的MVC異常過濾器
    /// 可以在Controller或Action上單獨使用,也可直接注冊為全局過濾器
    /// </summary>
    publicclassMVCExceptionFilterAttribution:HandleErrorAttribute
    {
    publicoverridevoidOnException(ExceptionContext filterContext)
    {
    base.OnException(filterContext);
    //標示當前異常已經被處理
    //如果不手動設置為false,則異常會被Application_Error事件捕獲,並可能顯示到客戶端
    filterContext.ExceptionHandled=true;
    filterContext.Result=newContentResult(){Content="MVC Error"};
    }
    }

     

 
2、注冊MVC全局過濾器
    直接在 Global文件中的 Application_Start 事件中進行注冊     
  1. protectedvoidApplication_Start()
    {
    AreaRegistration.RegisterAllAreas();
    RouteConfig.RegisterRoutes(RouteTable.Routes);
    //注冊全局的自定義MVC異常過濾器
    GlobalFilters.Filters.Add(newMVCExceptionFilterAttribution());
    }
 
 
3、注冊Asp.Net異常處理
    除了可以注冊MVC的異常處理過濾器外,還可以直接在Global文件中的 Application_Error 事件中處理Asp.Net中的異常
  1. /// <summary>
    /// 處理Asp.Net中的異常
    /// Controller中未處理的異常會被這里捕獲
    /// </summary>
    publicvoidApplication_Error(object sender,EventArgs e)
    {
    var exception =Server.GetLastError();
    //處理異常
    }

     

 
MVC中的異常首先會被過濾器捕獲,如果異常在過濾中標識為已處理,則不會被 Application_Error 事件再次捕獲,否則 Application_Error 事件中的代碼會被觸發。
 
 
 
 
二、WebApi中異常過濾器
 
1、自定義WebApi異常過濾器
 
    創建一個類,繼承自 ExceptionFilterAttribute 即可,如果不需要以特性的方式進行使用,則只需要實現 IExceptionFilter 接口即可,
注意,該接口在 System.Web.Http.Filters 命名空間下
 
/// <summary>
/// WebApi異常過濾器
/// 可以在Controller或Action上單獨使用,也可直接注冊為全局過濾器
/// </summary>
publicclassWebApiExceptionFilterAttribution:ExceptionFilterAttribute
{
publicoverridevoidOnException(HttpActionExecutedContext actionExecutedContext)
{
base.OnException(actionExecutedContext);
actionExecutedContext.Response=newSystem.Net.Http.HttpResponseMessage(System.Net.HttpStatusCode.OK){ReasonPhrase="api error"};
}
}

 

 
2、注冊全局WebApi過濾器
    同樣在 Global文件中的 Application_Start 事件中進行過濾器的注冊,
注意,與MVC不同,此處是在 GlobalConfiguration 上進行注冊
protectedvoidApplication_Start()
{
AreaRegistration.RegisterAllAreas();
GlobalConfiguration.Configure(WebApiConfig.Register);
//注冊MVC中的過濾器 詳見MVCExceptionFilter項目示例
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
//注冊一個自定義的全局WebApi異常過濾器
GlobalConfiguration.Configuration.Filters.Add(newWebApiExceptionFilterAttribution());
}

 

 
 
3、注冊Asp.Net異常處理
    在WebApi的項目中同樣可以注冊Asp.Net的異常處理事件,但是此處並不會捕獲WebApi中APIController中拋出的異常,只會捕獲MVC中
Controller拋出的異常
/// <summary>
/// 處理Asp.Net中的異常
/// Controller中未處理的異常會被這里捕獲
/// 但ApiController中的異常不會被捕獲
/// </summary>
publicvoidApplication_Error(object sender,EventArgs e)
{
var exception =Server.GetLastError();
//處理異常
}

 

 
參考資料:
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM