您的位置:首页 > 编程语言 > ASP

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());}}}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  asp.net Web Api 异常