首页 技术 正文
技术 2022年11月23日
0 收藏 861 点赞 5,028 浏览 2123 个字

声明:本方式及代码只使用与.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,那么其他所有的异常都会捕捉到。

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:8,991
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,505
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,349
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,134
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,766
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,844