WebApi 異常處理解決方案


 

1.繼承ExceptionFilterAttribute類,重寫OnException方法

 public class WebApiExceptionFilterAttribute : ExceptionFilterAttribute
    {
        //重寫基類的異常處理方法
        public override void OnException(HttpActionExecutedContext actionExecutedContext)
        {
            //業務異常處理
            if (actionExecutedContext.Exception is BusinessException)
            {
                var businessException = (BusinessException)actionExecutedContext.Exception;
                //自定義業務異常編碼
                int businessExceptionCode = businessException.ErrorMessage.Code;
                //業務異常消息
                string businessExceptionMsg = businessException.Message;
                //異常消息Json串
                var err = new { errcode = businessExceptionCode, errmsg = businessExceptionMsg };
                string errMsg = JsonConvert.SerializeObject(err);

                //系統異常碼
                var oResponse = new HttpResponseMessage(HttpStatusCode.InternalServerError);
                oResponse.Content = new StringContent(" ");
                oResponse.Headers.Add("errMsg", errMsg);
                actionExecutedContext.Response = oResponse;
            }
            else
            {
                actionExecutedContext.Response = new HttpResponseMessage(HttpStatusCode.InternalServerError);
                //異常消息Json串
                var err = new { errcode = CommonErrorCode.ServiceError, errmsg = actionExecutedContext.Exception.Message };
                string errMsg = JsonConvert.SerializeObject(err);

                //系統異常碼
                var oResponse = new HttpResponseMessage(HttpStatusCode.InternalServerError);
                oResponse.Content = new StringContent(" ");
                oResponse.Headers.Add("errMsg", errMsg);
                actionExecutedContext.Response = oResponse;
            }

            base.OnException(actionExecutedContext);
        }
    }

 2. Global.asax中,Application_Start方法中添加過濾器

protected void Application_Start()
        {
            GlobalConfiguration.Configure(WebApiConfig.Register);
            GlobalConfiguration.Configuration.Filters.Add(new WebApiExceptionFilterAttribute());
        }

 3.例子:

控制器:

public class TestController : ApiController
    {
        [HttpGet]
        public string GetTest1()
        {
            
            return "value1";
        }

        [HttpGet]
        public string GetTest2()
        {
            throw new BusinessException(123456,"業務異常");
        }

        [HttpGet]
        public string GetTest3()
        {
            throw new Exception("系統異常");
        }
    }

 結果:

 

 

提升:

為了滿足每個webapi項目都應用自定義異常,把異常類封裝到程序集中使用

1.結構:

問題:YesWay.WebAPI異常拋出類庫添加引用需與webapI項目用的引用需相同,

之前的這些我都是在引用管理器,程序集中一個個找的,添加的,出現進不了OnException方法的問題,用nuget添加的就好了,可能是版本不一樣吧

具體有這些東東:(他們之間有依賴,不需要一個個加,加一個可能會出來好幾個...)

webapi需要引用的包:
Microsoft.AspNet.WebApi
Microsoft.AspNet.WebApi.Client
Microsoft.AspNet.WebApi.Client.zh-Hans
Microsoft.AspNet.WebApi.Core
Microsoft.AspNet.WebApi.Core.zh-Hans
Microsoft.AspNet.WebApi.WebHost
Microsoft.AspNet.WebApi.WebHost.zh-Hans
Microsoft.CodeDom.Providers.DotNetCompilerPlat
Microsoft.Net.Compilers
Newtonsoft.Json

2.webapi項目引用程序集

3.可以在控制器,控制器方法加特性使用

 

global中加這句,所有的控制器就都加上了
 
 

 

 


免責聲明!

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



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