.NET WebAPI 利用特性捕捉异常
声明:本方式及代码只使用与.NET Web API.
先创建类继承ExceptionFilterAttribute类型并复写OnException方法。
代码如下:
using System;
using System.IO;
using System.Net.Http;
using System.Text;
using System.Web.Http.Filters;
using FrameWork.Common;
using FrameWork.Common.Const; namespace FrameWork.Web.Handle
{
/// <summary>
/// 处理错误信息
/// </summary>
public class ErrorHandleAttribute : ExceptionFilterAttribute
{
public override void OnException(HttpActionExecutedContext filterContext)
{
// 错误处理
base.OnException(filterContext);
var sb = new StringBuilder();
sb.AppendLine("参数:"+ GetExceptionMessage(filterContext));
sb.AppendLine("异常内容:"+ filterContext.Exception.ToJson());
Log4NetHelp.Error(sb.ToString());
filterContext.Response = GetResponse(sb.ToString());
} /// <summary>
/// 处理错误信息为方便开发人员阅读的格式,包括接口地址以及参数
/// </summary>
/// <param name="actionExecutedContext">异常内容</param>
private string GetExceptionMessage(HttpActionExecutedContext actionExecutedContext)
{
var session = System.Web.HttpContext.Current.Session;
var request = System.Web.HttpContext.Current.Request;
var guid = Guid.NewGuid().ToString();
var task = actionExecutedContext.ActionContext.Request.Content.ReadAsStreamAsync();
var content = string.Empty;
try
{
var sm = task.Result;
if (sm != null)
{
sm.Seek(, SeekOrigin.Begin);
var len = (int)sm.Length;
var inputByts = new byte[len];
sm.Read(inputByts, , len);
sm.Close();
content = Encoding.UTF8.GetString(inputByts);
sm.Close();
}
}
catch (Exception e)
{
return e.Message;
} var sessionId = session == null ? "" : session.SessionID;
var pars = string.Format("error:\r\n id = {3};\r\n sessionId = {0};\r\n url = {1};\r\n contentType = {4};\r\n content = {2};"
, sessionId
, request.RawUrl
, content
, guid
, request.ContentType); return pars;
} /// <summary>
/// 处理错误信息后执行的方法
/// </summary>
/// <param name="mes">错误信息</param>
private HttpResponseMessage GetResponse(string mes)
{
return JsonHelper.ToJson(new
{
Info = CommonConst.FailStr,
Message = mes,
Msg = false,
ResultCode = CommonConst.FailCode
});
}
}
}
如何使用呢?
只需要在需要捕捉异常的控制器加上[ErrorHandle]即可。
例如:
[ErrorHandle]
public abstract class AdminControllerBase : Controller
{
//代码逻辑
}
如果继承AdminControllerBase或者带有[ErrorHandle]特性的类和方法出现了错误,都会执行OnException方法。
可以在处理异常的方法里面加上自己想要的逻辑处理。
也可以直接在WebApiConfig.cs文件中加上
config.Filters.Add(new WebApiErrorHandleAttribute());
这样就是全局捕捉异常了,只要接口内部没有try…catch,那么其他所有的异常都会捕捉到。
.NET WebAPI 利用特性捕捉异常的更多相关文章
- .NET [MVC] 利用特性捕捉异常
声明:本代码只适用于.NET MVC. 先创建一个类继承ActionFilterAttribute这个抽象类以及实现IExceptionFilter接口,并实现它的方法OnException. 代码如 ...
- .NET Core[MVC] 利用特性捕捉异常
声明:本方式适用于MVC.本代码只适用于.NET Core MVC. 先创建一个类继承ExceptionFilterAttribute这个抽象类,并override它的方法OnException. 代 ...
- 如何在方法上贴上attribute(特性)捕捉方法的异常,来实现我们的需求
在方法上贴上attribute(特性)捕捉方法的异常,其实这么做也是为了在项目中不会大量使用try-cacth这样的语句,同时使我们的代码看起来更简洁,更直观,将逻辑业务分离使得后期维护方便.这里我们 ...
- MVC 应用程序级别捕捉异常
捕捉异常: using System; using System.IO; using System.Net; using System.Net.Http; using System.Net.Http. ...
- C#开发---利用特性自定义数据导出到Excel
网上C#导出Excel的方法有很多.但用来用去感觉不够自动化.于是花了点时间,利用特性做了个比较通用的导出方法.只需要根据实体类,自动导出想要的数据 1.在NuGet上安装Aspose.Cells或 ...
- webapi 利用webapiHelp和swagger生成接口文档
webapi 利用webapiHelp和swagger生成接口文档.均依赖xml(需允许项目生成注释xml) webapiHelp:微软技术自带,仅含有模块.方法.请求-相应参数的注释. swagge ...
- MVC WebAPI框架里设置异常返回格式统一
webApi里设置全局异常返回格式今天为了设置api返回格式统一,在网上找了一推资料,各种资料参差不齐的,最后自己捣鼓,终于弄出来了,直接上代码 /// <summary> /// 消息代 ...
- ABP捕捉异常错误代码
在服务层或者CORE层 随便哪里都可以 创建一个捕捉异常的文件夹 里面写一个LonsidException类 继承后面的接口 然后重写继承的方法 这样在ABP项目运行阶段 无论在哪里出现异 ...
- zzw原创_oracle循环中的异常捕捉_捕捉异常后并继续循环
例子如下 set serveroutput on; declare V_SQL VARCHAR2(255); errorCode number; --异常编码 errorMsg var ...
随机推荐
- JS与IOS、Android的交互
一.JS与Android 放在了assets文件夹下了(注意若使用的是AS这个IDE,assets文件夹应放在src/main目录下) <!DOCTYPE html> <html&g ...
- go语言的for循环
for循环是一个循环控制结构,可以执行指定次数的循环. 三种循环方式 第一种,常见的 for 循环,支持初始化语句 for init; condition; post { } init: 一般为赋值表 ...
- sql 随机获取数据
SQL Server: SELECT TOP 10 * FROM T_USER ORDER BY NEWID() ORACLE: SELECT * FROM (SELECT * FROM T_USER ...
- Mesos源码分析(12): Mesos-Slave接收到RunTask消息
在前文Mesos源码分析(8): Mesos-Slave的初始化中,Mesos-Slave接收到RunTaskMessage消息,会调用Slave::runTask. void Slave::ru ...
- 请不要在JDK7及以上用Json-lib了
[Json-lib 介绍] Json-lib 是以前 Java 常用的一个 Json 库,最后的版本是 2.4,分别提供了 JDK 1.3 和 1.5 的支持,最后更新时间是 2010年12月14日. ...
- 微信小程序 + mock.js 实现后台模拟及调试
一.创建小程序项目 mock.js 从 https://github.com/nuysoft/Mock/blob/refactoring/dist/mock.js 下载 api.js:配置模拟数据和后 ...
- 获取安卓应用APK包名的方法
应用商店按照符合Android标准的原则进行设计,使用包名(Package Name)作为应用的唯一标识.即:包名必须唯一,一个包名代表一个应用,不允许两个应用使用同样的包名.包名主要用于系统识别应用 ...
- SUSE12Sp3-.NET Core 2.2.1 runtime安装
1.安装libicu依赖 1.在线安装 sudo mkdir /usr/local/dotnet #创建目录 cd /usr/local/dotnet sudo wget https://downlo ...
- java web项目get,post请求参数中文乱码解决
[转载]原文地址:https://www.cnblogs.com/tom-plus/p/6392279.html 在开发过程中,有时候会碰到get,post请求参数中文乱码. 原因: Http请求传输 ...
- HTTP 400 错误 - 请求无效 (Bad request)
在ajax请求后台数据时有时会报 HTTP 400 错误 - 请求无效 (Bad request);出现这个请求无效报错说明请求没有进入到后台服务里: 原因:1)前端提交数据的字段名称或者是字段类型和 ...