WebApi 异常处理解决方案
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.可以在控制器,控制器方法加特性使用

WebApi 异常处理解决方案的更多相关文章
- C#进阶系列——WebApi 异常处理解决方案
前言:上篇C#进阶系列——WebApi接口传参不再困惑:传参详解介绍了WebApi参数的传递,这篇来看看WebApi里面异常的处理.关于异常处理,作为程序员的我们肯定不陌生,记得在介绍 AOP 的时候 ...
- C#进阶系列——WebApi 异常处理解决方案(转)
出处:http://www.cnblogs.com/landeanfen/p/5363846.html 阅读目录 一.使用异常筛选器捕获所有异常 二.HttpResponseException自定义异 ...
- (转)C# WebApi 异常处理解决方案
原文地址:http://www.cnblogs.com/landeanfen/p/5363846.html 一.使用异常筛选器捕获所有异常 我们知道,一般情况下,WebApi作为服务使用,每次客户端发 ...
- Asp.net WebApi 异常处理解决方案
一.使用异常筛选器捕获所有异常 我们知道,一般情况下,WebApi作为服务使用,每次客户端发送http请求到我们的WebApi服务里面,服务端得到结果输出response到客户端.这个过程中,一旦服务 ...
- C#进阶系列——WebApi异常处理解决方案
阅读目录 一.使用异常筛选器捕获所有异常 二.HttpResponseException自定义异常信息 三.返回HttpError 四.总结 正文 为什么说是实践?因为在http://www.asp. ...
- WebApi异常处理解决方案
一.使用异常筛选器捕获所有异常 首先在App_Start里面新建一个类WebApiExceptionFilterAttribute.cs,继承ExceptionFilterAttribute,重写On ...
- C#进阶--WebApi异常处理机制
其实对于C#异常处理大家都不陌生,但是对于在WeiApi上的异常处理实际上也和传统异常处理区别不大,但是却经过封装可以让异常更加友好,https://docs.microsoft.com/en-us/ ...
- webapi框架搭建-webapi异常处理
webapi框架搭建系列博客 前言 上一篇我们已经完成了项目的日志管理,在项目开发中日志会经常记录程序中的异常,供后续问题排查使用.本篇讲如何在webapi里加入异常处理机制. 目的和原则 1.程序任 ...
- mvc和webapi同一解决方案调试办法
今天在研究WebApi的时候,用mvc端直接请求webapi接口,发现怎么也请求不了,自己搞了半天,猜测可能是webapi没有完全启动吧,解决办法是将解决方案属性改为多启动项目,具体方法如下: 直接运 ...
随机推荐
- 【APP接口开发】php获取body数据
PHP获取接口数据: $postStr = file_get_contents("php://input");//因为很多都设置了register_globals禁止,不能用$GL ...
- struts2 转发、重定向概述
转发等参数传递的注解方式: @Action(value = "operatorRoleAction", results = { @Result(name = "view& ...
- C++多态有哪几种方式?
C++多态方式: (1)静态多态(重载,模板) 是在编译的时候,就确定调用函数的类型. (2)动态多态(覆盖,虚函数实现) 在运行的时候,才确定调用的是哪个函数,动态绑定.运行基类指针指向派生类的对象 ...
- Chrome 浏览器端口的坑:ERR_UNSAFE_PORT
nodejs 启动了一个6000端口的服务 本来是打算测试用的,结果一直报以下错误 但我使用 curl 来请求该接口地址是正常的.这就很纳闷了. 经过一番折腾无果之后,百度才知道.这个6000端口是非 ...
- jdbc链接基础
1 jdbc 链接两种方式,通过jdbc链接mysql数据库,url:jdbc:mysql://ip:端口[/database name] 通过什么驱动器,链接什么数据库,数据库的ip,连接端口,可以 ...
- ffff表单提交的那点事
一.关于application/x-www-form-urlencoded等字符编码的解释说明 在Form元素的语法中,EncType表明提交数据的格式 用 Enctype 属性指定将数据回发到服务器 ...
- 关于DebuggerHidden特性在Unity中的使用
经过测试,DebuggerHidden只对输出的日志有影响.对编辑器的控制台输入没有影响 你可以通过这个特性避免日志log有一堆的堆栈信息 并且测试过发现Debug.LogError也不支持该特性,和 ...
- C#趣味程序---爱因斯坦的台阶问题
问题:设有一阶梯,每步跨2阶.最后余1阶.每步跨3阶.最后余2阶:每步跨5阶.最后余4阶:每步跨6阶.最后余5阶:每步跨7阶.刚好到阶顶.问共同拥有多少阶梯? using System; namesp ...
- 高德地图API INVALID_USER_SCODE问题以及keystore问题
今天这篇文章会给大家介绍三个问题: 1,接入API时出现invalid_user_scode问题 首先进行第一个大问题,接入高德地图API时出现invalid_user_scode问题 因为项目需要接 ...
- 悦铃文件必须是CCITT A_Law格式的,且没有被压缩
最近在给公司弄来电彩铃,用的是电信的“悦铃”业务,办理过程不想多说了..给了我个网址和账号让我登录,登录界面惨不忍睹,感觉电信根本没有要宣传这项业务的意思,像是粗制滥造外包赶工做出来的.. 当然这不是 ...