1. 程式人生 > >MVC WebAPI框架裡設定異常返回格式統一

MVC WebAPI框架裡設定異常返回格式統一

webApi裡設定全域性異常返回格式

今天為了設定api返回格式統一,在網上找了一推資料,各種資料參差不齊的,最後自己搗鼓,終於弄出來了,直接上程式碼

    /// <summary>
    /// 訊息代理處理,用來捕獲這些特殊的異常資訊
    /// </summary>
    public class CustomErrorMessageDelegatingHandler : DelegatingHandler
    {
        protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
        {
            return base.SendAsync(request, cancellationToken).ContinueWith<HttpResponseMessage>((responseToCompleteTask) =>
            {
                HttpResponseMessage response = responseToCompleteTask.Result;
                HttpError error = null;
                if (response.TryGetContentValue<HttpError>(out error))
                {
                    //自定義錯誤處理
                    //error.Message = "這個介面調用出錯了";
                }
                if (error != null)
                {   //這是本人建立的一個返回類                 
                    var resultMsg = new ResultMsg { StatusCode = (int)StatusCodeEnum.HttpUrlEror, Info =error.MessageDetail  };
return new HttpResponseMessage { Content = new StringContent(resultMsg.ToJson(), System.Text.Encoding.GetEncoding("UTF-8"), "application/json"), StatusCode = HttpStatusCode.OK }; } else { return response; } }); } }
然後就是註冊該cs檔案,找到Global.asax檔案
 protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();
            //FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            //RouteConfig.RegisterRoutes(RouteTable.Routes);
            //BundleConfig.RegisterBundles(BundleTable.Bundles);
            GlobalConfiguration.Configure(WebApiConfig.Register);
            GlobalConfiguration.Configuration.Filters.Add(new ErrorHandler());
}

最後大功告成,效果:
{
  "StatusCode": 404,
  "Info": "在控制器“StudyTask”上找不到與該請求匹配的操作。",
  "Data": null
}


最後,本人技術菜鳥,有好的建議希望分享,謝謝