.NET WebAPI 利用特性捕捉异常
程序员文章站
2022-08-30 10:09:17
声明:本方式及代码只使用与.NET Web API. 先创建类继承ExceptionFilterAttribute类型并复写OnException方法。 代码如下: 如何使用呢? 只需要在需要捕捉异常的控制器加上[ErrorHandle]即可。 例如: 如果继承AdminControllerBase ......
声明:本方式及代码只使用与.NET Web API.
先创建类继承ExceptionFilterAttribute类型并复写OnException方法。
代码如下:
using System; using System.IO; using System.Net.Http; using System.Text; using System.Web.Http.Filters; using FrameWork.Common; using FrameWork.Common.Const; namespace FrameWork.Web.Handle { /// <summary> /// 处理错误信息 /// </summary> public class ErrorHandleAttribute : ExceptionFilterAttribute { public override void OnException(HttpActionExecutedContext filterContext) { // 错误处理 base.OnException(filterContext); var sb = new StringBuilder(); sb.AppendLine("参数:"+ GetExceptionMessage(filterContext)); sb.AppendLine("异常内容:"+ filterContext.Exception.ToJson()); Log4NetHelp.Error(sb.ToString()); filterContext.Response = GetResponse(sb.ToString()); } /// <summary> /// 处理错误信息为方便开发人员阅读的格式,包括接口地址以及参数 /// </summary> /// <param name="actionExecutedContext">异常内容</param> private string GetExceptionMessage(HttpActionExecutedContext actionExecutedContext) { var session = System.Web.HttpContext.Current.Session; var request = System.Web.HttpContext.Current.Request; var guid = Guid.NewGuid().ToString(); var task = actionExecutedContext.ActionContext.Request.Content.ReadAsStreamAsync(); var content = string.Empty; try { var sm = task.Result; if (sm != null) { sm.Seek(0, SeekOrigin.Begin); var len = (int)sm.Length; var inputByts = new byte[len]; sm.Read(inputByts, 0, len); sm.Close(); content = Encoding.UTF8.GetString(inputByts); sm.Close(); } } catch (Exception e) { return e.Message; } var sessionId = session == null ? "" : session.SessionID; var pars = string.Format("error:\r\n id = {3};\r\n sessionId = {0};\r\n url = {1};\r\n contentType = {4};\r\n content = {2};" , sessionId , request.RawUrl , content , guid , request.ContentType); return pars; } /// <summary> /// 处理错误信息后执行的方法 /// </summary> /// <param name="mes">错误信息</param> private HttpResponseMessage GetResponse(string mes) { return JsonHelper.ToJson(new { Info = CommonConst.FailStr, Message = mes, Msg = false, ResultCode = CommonConst.FailCode }); } } }
如何使用呢?
只需要在需要捕捉异常的控制器加上[ErrorHandle]即可。
例如:
[ErrorHandle] public abstract class AdminControllerBase : Controller { //代码逻辑 }
如果继承AdminControllerBase或者带有[ErrorHandle]特性的类和方法出现了错误,都会执行OnException方法。
可以在处理异常的方法里面加上自己想要的逻辑处理。
推荐阅读
-
循序渐进学.Net Core Web Api开发系列【2】:利用Swagger调试WebApi
-
.NET WebAPI 利用特性捕捉异常
-
.NET [MVC] 利用特性捕捉异常
-
利用过滤器Filter和特性Attribute实现对Web API返回结果的封装和统一异常处理
-
.NET Core[MVC] 利用特性捕捉异常
-
ASP.NET Core 2.2 WebApi 系列【八】统一返回格式(返回值、模型验证、异常)
-
.net中捕捉全局未处理异常的三种方式示例
-
利用过滤器Filter和特性Attribute实现对Web API返回结果的封装和统一异常处理
-
ASP.NET Core 2.2 WebApi 系列【八】统一返回格式(返回值、模型验证、异常)
-
.NET WebAPI 利用特性捕捉异常