.NET WebAPI 利用特性捕捉异常
2018-06-27 10:04:49来源:博客园 阅读 ()
声明:本方式及代码只使用与.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方法。
可以在处理异常的方法里面加上自己想要的逻辑处理。
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- asp.net源程序编译为dll文件并调用的实现过程 2020-03-29
- Asp.net MVC SignalR来做实时Web聊天实例代码 2020-03-29
- ASP.NET MVC中jQuery与angularjs混合应用传参并绑定数据 2020-03-29
- Asp.Net中WebForm的生命周期 2020-03-29
- ASP.NET使用Ajax返回Json对象的方法 2020-03-23
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash