WebApi捕捉异常的一套方案
生活随笔
收集整理的這篇文章主要介紹了
WebApi捕捉异常的一套方案
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
public class ExceptionFilter:ExceptionFilterAttribute{NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger();public override void OnException(HttpActionExecutedContext actionExecutedContext){actionExecutedContext?.Request?.Content?.ReadAsStreamAsync().Result.Seek(0, System.IO.SeekOrigin.Begin);StringBuilder sb = new StringBuilder();sb.AppendLine($"請求路徑:{actionExecutedContext?.Request?.RequestUri}" );sb.AppendLine($"請求方法:{actionExecutedContext?.Request?.Method}" );sb.AppendLine($"請求正文:{actionExecutedContext?.Request?.Content?.ReadAsStringAsync().Result}" );//錯誤日志var ex = actionExecutedContext.Exception;while (ex.InnerException != null){ex = ex.InnerException;}sb.AppendLine($"異常類型:{ex.GetType().Name}");sb.AppendLine($"異常說明:{ex.Message}");sb.AppendLine($"異常堆棧:{ex.StackTrace}");logger.Error(sb.ToString());}}
簡單說明一下上面的代碼:
繼承ExceptionFilterAttribute類,并重寫OnException方法。
因為要獲取請求中的正文,正文已經(jīng)被之前的管道讀取過,所以要把流的位置定位到最開始:actionExecutedContext?.Request?.Content?.ReadAsStreamAsync().Result.Seek(0, System.IO.SeekOrigin.Begin);
sb.AppendLine($"請求路徑:{actionExecutedContext?.Request?.RequestUri}" ); sb.AppendLine($"請求方法:{actionExecutedContext?.Request?.Method}" ); sb.AppendLine($"請求正文:{actionExecutedContext?.Request?.Content?.ReadAsStringAsync().Result}" );
這三段就是簡單的把請求的url,Method,Content記錄下來以便我們程序異常后根據(jù)日志重現(xiàn)問題。
var ex = actionExecutedContext.Exception;while (ex.InnerException != null){ex = ex.InnerException;}獲取到最里面的Exception,將錯誤信息記錄下來。這樣就能獲得比較全面的錯誤日志了。
最后,要將我們的ExceptionFilter類替換掉api默認的Exception實現(xiàn),找到WebApiConfig類,在HttpConfiguration的Filters中添加ExceptionFilter,代碼如下:
public static class WebApiConfig{public static void Register(HttpConfiguration config){//跨域配置config.EnableCors(new EnableCorsAttribute("*", "*", "*"));// Web API 路由 config.MapHttpAttributeRoutes();config.Routes.MapHttpRoute(name: "DefaultApi",routeTemplate: "api/{controller}/{id}",defaults: new { id = RouteParameter.Optional });config.Filters.Add(new ExceptionFilter());}}
大功告成!
轉(zhuǎn)載于:https://www.cnblogs.com/niye/p/9198301.html
總結(jié)
以上是生活随笔為你收集整理的WebApi捕捉异常的一套方案的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 中国接任金砖国家是什么意思
- 下一篇: YII1 MVC初认识(二)