博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
WebApi 异常处理解决方案
阅读量:5231 次
发布时间:2019-06-14

本文共 3163 字,大约阅读时间需要 10 分钟。

 

1.继承ExceptionFilterAttribute类,重写OnException方法

public class WebApiExceptionFilterAttribute : ExceptionFilterAttribute    {        //重写基类的异常处理方法        public override void OnException(HttpActionExecutedContext actionExecutedContext)        {            //业务异常处理            if (actionExecutedContext.Exception is BusinessException)            {                var businessException = (BusinessException)actionExecutedContext.Exception;                //自定义业务异常编码                int businessExceptionCode = businessException.ErrorMessage.Code;                //业务异常消息                string businessExceptionMsg = businessException.Message;                //异常消息Json串                var err = new { errcode = businessExceptionCode, errmsg = businessExceptionMsg };                string errMsg = JsonConvert.SerializeObject(err);                //系统异常码                var oResponse = new HttpResponseMessage(HttpStatusCode.InternalServerError);                oResponse.Content = new StringContent(" ");                oResponse.Headers.Add("errMsg", errMsg);                actionExecutedContext.Response = oResponse;            }            else            {                actionExecutedContext.Response = new HttpResponseMessage(HttpStatusCode.InternalServerError);                //异常消息Json串                var err = new { errcode = CommonErrorCode.ServiceError, errmsg = actionExecutedContext.Exception.Message };                string errMsg = JsonConvert.SerializeObject(err);                //系统异常码                var oResponse = new HttpResponseMessage(HttpStatusCode.InternalServerError);                oResponse.Content = new StringContent(" ");                oResponse.Headers.Add("errMsg", errMsg);                actionExecutedContext.Response = oResponse;            }            base.OnException(actionExecutedContext);        }    }

 2. Global.asax中,Application_Start方法中添加过滤器

protected void Application_Start()        {            GlobalConfiguration.Configure(WebApiConfig.Register);            GlobalConfiguration.Configuration.Filters.Add(new WebApiExceptionFilterAttribute());        }

 3.例子:

控制器:

public class TestController : ApiController    {        [HttpGet]        public string GetTest1()        {                        return "value1";        }        [HttpGet]        public string GetTest2()        {            throw new BusinessException(123456,"业务异常");        }        [HttpGet]        public string GetTest3()        {            throw new Exception("系统异常");        }    }

 结果:

 

 

提升:

为了满足每个webapi项目都应用自定义异常,把异常类封装到程序集中使用

1.结构:

问题:YesWay.WebAPI异常抛出类库添加引用需与webapI项目用的引用需相同,

之前的这些我都是在引用管理器,程序集中一个个找的,添加的,出现进不了OnException方法的问题,用nuget添加的就好了,可能是版本不一样吧

具体有这些东东:(他们之间有依赖,不需要一个个加,加一个可能会出来好几个...)

webapi需要引用的包:

Microsoft.AspNet.WebApi
Microsoft.AspNet.WebApi.Client
Microsoft.AspNet.WebApi.Client.zh-Hans
Microsoft.AspNet.WebApi.Core
Microsoft.AspNet.WebApi.Core.zh-Hans
Microsoft.AspNet.WebApi.WebHost
Microsoft.AspNet.WebApi.WebHost.zh-Hans
Microsoft.CodeDom.Providers.DotNetCompilerPlat
Microsoft.Net.Compilers
Newtonsoft.Json

2.webapi项目引用程序集

3.可以在控制器,控制器方法加特性使用

 

global中加这句,所有的控制器就都加上了
 
 

 

 

转载于:https://www.cnblogs.com/liuqiyun/p/9151519.html

你可能感兴趣的文章
【hdu 1429】胜利大逃亡(续)
查看>>
SQL字符型转日期型
查看>>
Java程序设计教程(第2版)阅读总结
查看>>
图论-次短路求法
查看>>
ios下opencv编译merge函数报错问题
查看>>
What's New for Visual C# 6.0
查看>>
ExtJs学习笔记之ComboBox组件
查看>>
关于收费软件
查看>>
getopt_long
查看>>
HTML5中File
查看>>
TensorFlow MNIST CNN 代码
查看>>
javascript之Style物
查看>>
兼容所有浏览器的实时监听输入的解决方案(转)
查看>>
JSON跨域解决方案收集
查看>>
【转】linux dumpe2fs命令
查看>>
SSH框架整合总结
查看>>
图的深度优先遍历
查看>>
C# 之 提高WebService性能大数据量网络传输处理
查看>>
Python面向对象之:三大特性:继承,封装,多态以及类的约束
查看>>
微信小程序实现类似JQuery siblings()的方法
查看>>