Asp.net Web Api开发(第三篇)自定义异常过滤器
2016-06-17 13:51
651 查看
如果不自定义异常过滤器,客户端调用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());}}}
相关文章推荐
- 分享微信开发Html5轻游戏中的几个坑
- 星外ASP.Net的安全设置相关说明
- Ruby中的异常处理代码编写示例
- C#、ASP.NET通用扩展工具类之TypeParse
- 实现ASP.NET无刷新下载并提示下载完成的开发思路
- C#、ASP.NET通用扩展工具类之LogicSugar
- C#、ASP.NET通用工具类IsWhat?(可以判断数字、身份证、数据类型等等)
- SQL Server 2005 中使用 Try Catch 处理异常
- 程序中常用的种代码
- MySQL抛出Incorrect string value异常分析
- ASP.NET、ASP、PHP、JSP之间有什么区别?
- 在ASP.NET 2.0中操作数据之六十六:在TableAdapters中使用现有的存储过程
- ASP.NET页面间的传值的几种方法
- 在ASP.NET 2.0中操作数据之二十四:分页和排序报表数据
- 入侵ASP.net网站的经验附利用代码
- 盘点PHP和ASP.NET的10大对比!
- 在ASP.NET 2.0中操作数据之四十八:对SqlDataSource控件使用开放式并发
- 浅谈C#中简单的异常引发与处理操作
- ASP.NET MVC4入门教程(四):添加一个模型
- 在ASP.NET 2.0中操作数据之二十三:基于用户对修改数据进行限制