您當前位置>首頁 » 新聞資訊 » 網站(zhàn)建設 >
Asp.net Web Api開(kāi)發(第三篇)自(zì)定義異常過濾器(qì)
發表時(shí)間(jiān):2016-6-17
發布人(rén):葵宇科(kē)技(jì)
浏覽次數(shù):57
如(rú)果不(bù)自(zì)定義異常過濾器(qì),≠¶σ♦;客戶端調用(yòng)API出現(xiàn)錯(cuò)誤時(shí)ÿ☆'♥0c;将隻能(néng)得(de)到(dào)一(yī)個(gè)500之類的(de)錯(cuΩ↕ò)誤狀态,以及一(yī)句:出現(xiàn)錯(cuò)誤。÷≠© 而服務端卻無法攔截到(dào)任何異常代碼,當然★♥≠"你(nǐ)也(yě)可(kě)以在所有(yǒu)Action裡(lǐ)面寫try-catch來 ←(lái)捕獲處理(lǐ)。但(dàn)這(zhè)不↑☆∑(bù)是(shì)我想要(yào)的(de),我們可(kě)以自(zì)定義一(yδφ→δī)個(gè)異常過濾器(qì)來(lái)捕獲單個(gè)Action或整個(gè÷±)Controller裡(lǐ)面的(de)所有(yǒu)Action的(£ Ωde)異常。
上(shàng)代碼:
using System.Net;
using System.Net≠π.Http;
using System.Web.Http.Fil≤→≠φters;
using RRP.Models.Response;
namespace RRPσπ Service.WebApi.Comm
{
/// <π<summary>
/// 異常處理(lǐ)過濾器(qì)
///÷×∑ </summary>
public class DE≥♦↓xceptionFilterAttribute : ExceptionFilt€₽λerAttribute
{
public overδγ<ride void>
using System.Linq;
using System★λ.Web.Http;
namespace RRPService.WebApi.App.Co↑>ntrollers
{
[DExceptionFilteσ÷↑r]
public class CompanyController : ApiCon★¥σ€troller
{
[HttpPost]
♠&∞♣ [Route("api/1110β★¥4;)]
public RRP.Com≠₽pany.Models.Response.C3000O Login(ε→λRRP.Company.Models.Request.C3000I aIn)
→₽≤{
return RRP.Company.BLL.C3000(aIn);
±λ }
[DExceptionFilter]
★αβ [HttpPost]
[Rout★ e("api/1110")]
public RRP.Compa®≥™ny.Models.Response.C3001O Login2(RRP.Company.Moσ♥ dels.Request.C3001I aIn)
{
§β return RRP.Companλ¥↑y.BLL.C3001(aIn);
}
}
}
最後,在Global.asax中注冊我✘©♠₹們得(de)自(zì)定義異常過濾器(qì):
using RRPService.WebApi.Comm;ε§
using System.Web.Http;
using≥γ System.Web.Mvc;
namespace RRPService.WebAp≈₩i.App
{
/// <summary♥☆✘→>
/// web api 服務
/// <✘☆☆;/summary>
public class WebApiAp ✘plication : System.Web.HttpApplication
←γ {
/// <summary>
/// 服務啓動
≈ /// </summary>∞←♥;
protected void Application_Start()
∏Ω {
GlobalConfigurati&♥ on.Configure(WebApiConfig.Registe >φr);
GlobalConfigura€φtion.Configuration.Filters.Add(new DE←δ×ΩxceptionFilterAttribute());//&φ≈"λlt;<<<------------------重點
↑¥ //Json序列化(huà)庫替換
εΩ HttpConfiguration fConfig = GlobalCφδαonfiguration.Configuration;
fConfig.£ΩπFormatters.Remove(fConfig.Forma§¥tters.JsonFormatter);
fConfig.Forma©λ↕§tters.Remove(fConfig.Formattersα.XmlFormatter);
fC ₩≈onfig.Formatters.Insert(0, ne≥÷w JilFormatter());
}
}
}