Asp.net Web Api开发(第三篇)自定义异常过滤器
来源:互联网 发布:知乎手机最好的变声器 编辑:程序博客网 时间:2024/06/05 05:27
如果不自定义异常过滤器,客户端调用API出现错误时,将只能得到一个500之类的错误状态,以及一句:出现错误。而服务端却无法拦截到任何异常代码,当然你也可以在所有Action里面写try-catch来捕获处理。但这不是我想要的,我们可以自定义一个异常过滤器来捕获单个Action或整个Controller里面的所有Action的异常。
上代码:
using System.Net;using System.Net.Http;using System.Web.Http.Filters;using RRP.Models.Response;namespace RRPService.WebApi.Comm{ /// <summary> /// 异常处理过滤器 /// </summary> public class DExceptionFilterAttribute : ExceptionFilterAttribute { public override void OnException(HttpActionExecutedContext context) { //可以记录一些日志 string fLog = context.Exception.ToString(); //篡改Response context.Response = new HttpResponseMessage(HttpStatusCode.OK); context.Response.Content = new StringContent(Dimoo.Lib.DataPack.JSerialize(new BaseResult() { success = 0, msg = "处理异常" })); } }}
然后,我们再把这个特性标记到所有Controller上或单个Action上面:
using System.Linq;using System.Web.Http;namespace RRPService.WebApi.App.Controllers{ [DExceptionFilter] public class CompanyController : ApiController { [HttpPost] [Route("api/1110")] public RRP.Company.Models.Response.C3000O Login(RRP.Company.Models.Request.C3000I aIn) { return RRP.Company.BLL.C3000(aIn); } [DExceptionFilter] [HttpPost] [Route("api/1110")] public RRP.Company.Models.Response.C3001O Login2(RRP.Company.Models.Request.C3001I aIn) { return RRP.Company.BLL.C3001(aIn); } }}最后,在Global.asax中注册我们得自定义异常过滤器:
using RRPService.WebApi.Comm;using System.Web.Http;using System.Web.Mvc;namespace RRPService.WebApi.App{ /// <summary> /// web api 服务 /// </summary> public class WebApiApplication : System.Web.HttpApplication { /// <summary> /// 服务启动 /// </summary> protected void Application_Start() { GlobalConfiguration.Configure(WebApiConfig.Register); GlobalConfiguration.Configuration.Filters.Add(new DExceptionFilterAttribute());//<<<<------------------重点 //Json序列化库替换 HttpConfiguration fConfig = GlobalConfiguration.Configuration; fConfig.Formatters.Remove(fConfig.Formatters.JsonFormatter); fConfig.Formatters.Remove(fConfig.Formatters.XmlFormatter); fConfig.Formatters.Insert(0, new JilFormatter()); } }}
0 0
- Asp.net Web Api开发(第三篇)自定义异常过滤器
- Asp.net Web Api开发(第一篇) 自定义HTTP消息拦截器
- Asp.net Web Api开发(第一篇) 自定义HTTP消息拦截器
- 异常处理在 ASP.NET Web API
- ASP.NET Web API 过滤器创建、执行过程(一)
- ASP.NET Web API 过滤器创建、执行过程(二)
- ASP.NET自定义控件组件开发 第一章 第三篇
- Asp.net Web Api项目开发笔记
- Asp.net Web Api开发(第二篇)性能:使用Jil提升Json序列化性能
- Asp.net Web Api开发(第四篇)Help Page配置和扩展
- asp.net web api
- ASP.NET Web API
- asp.net web api
- asp.net web api
- asp.net web api
- 启用和自定义 ASP.NET Web API 服务的安全性
- 启用和自定义 ASP.NET Web API 服务的安全性
- ASP.NET Web API: 宿主(Hosting)
- 访问数组(JNI)之申请释放
- ORACLE 11.2.0.4 数据导出 EXP-00003错误(空表不能导出)
- 排列组合问题的回溯(Backtracking) 思想总结
- android xml中的代码提示不全
- 使用Toolbar + DrawerLayout快速实现高大上菜单侧滑
- Asp.net Web Api开发(第三篇)自定义异常过滤器
- IOT 资讯平台集锦
- Viewpager+Fragment重复滑动后出现view重叠问题
- 浏览器开发者选项运行以下代码
- JavaScript HTML DOM
- Java Security:Java加密框架(JCA)简要说明
- PopupWindow无法全屏显示
- python获取页面元素的内容及长度
- 最大值计算过程(Find the Largest Number)