ASP.NET 通过拦截器记录错误日志的示例代码

 更新时间:2021年04月20日 11:56:53   作者:大稳·杨  
这篇文章主要介绍了ASP.NET 通过拦截器记录错误日志的示例代码,帮助大家更好的理解和学习使用.NET技术,感兴趣的朋友可以了解下

前言

    主要是记录一下实现的错误日志拦截,可以在拦截器里面控制返回的信息,把错误信息处理后返回给请求端。

拦截器

拦截器又称过滤器。

asp.net mvc本身是自带3种拦截器:Action拦截器、Result拦截器、Exception拦截器。 应用中常见的拦截器有日志拦截器(Action拦截器)和异常处理拦截器(Exception拦截器)。

java里spring mvc也常用拦截器来做些非干预业务逻辑的事,诸如实现HandlerInterceptor接口。

拦截器是AOP(面向切面编程)的一种应用。

拦截器要解决的问题:

1.代码复用。拦截器可被复用
2.职责单一。比如厨师只负责炒菜,不管前期的洗菜、后续的送菜工作。菜变质了也是直接喊一声就有人来处理。

这次我们用来记录错误日志

代码实战

拦截器

    /// <summary>
    /// 接口异常捕捉过滤器
    /// </summary>
    [AttributeUsage(AttributeTargets.All, AllowMultiple = false, Inherited = true)]
    public class ApiErrorHandleAttribute : ExceptionFilterAttribute
    {
        public override void OnException(HttpActionExecutedContext actionExecutedContext)
        {
            base.OnException(actionExecutedContext);
            actionExecutedContext.Response = GetResponse(actionExecutedContext);
        }

        /// <summary>
        /// 捕捉异常后响应方法
        /// </summary>
        private HttpResponseMessage GetResponse(HttpActionExecutedContext actionExecutedContext)
        {
            var requesthost = actionExecutedContext.ActionContext.Request.RequestUri.ToString();//当前请求的地址,包括ip加接口地址
            var method = actionExecutedContext.ActionContext.Request.Method.ToString();//当前请求是POST/GET/PUT/DELETE ……
            var controller = actionExecutedContext.ActionContext.ActionDescriptor.ControllerDescriptor.ControllerType.FullName;//当前请求的控制器所在全路径:xxx.WebAPI.Controllers.xxxController
            var action = actionExecutedContext.ActionContext.ActionDescriptor.ActionName; //当前请求的方法
            var paramters = actionExecutedContext.ActionContext.ActionArguments; //获取当前请求的参数
            var ip = HttpContext.Current.Request.UserHostAddress;
           
            LogHelper.Error($"错误信息:URL:{actionExecutedContext.Request.RequestUri},--参数信息:{paramters.ToJson()},--actionExecutedContext.Exception:{actionExecutedContext.Exception.ToJson()}");
            var response = new { code = 506, message = $"{actionExecutedContext.Exception.Message},URL:{actionExecutedContext.Request.RequestUri}", ex = actionExecutedContext.Exception };
           
            return JsonHelper.ToHttpResponseMessage(response);
        }

    }

工具类方法

    public static class JsonHelper
    {
        /// <summary>
        /// 转化为json格式的HttpResponseMessage
        /// </summary>
        public static HttpResponseMessage ToHttpResponseMessage(object obj)
        {
            string str;
            if (obj is string || obj is char)
            {
                str = obj.ToString();
            }
            else
            {
                str = obj.ToJson();
            }
            var result = new HttpResponseMessage { Content = new StringContent(str, Encoding.GetEncoding("UTF-8"), "application/json") };
            return result;
        }

        /// <summary>
        /// 转化为json字符串,默认的时间格式
        /// </summary>
        /// <param name="obj">要被转化的对象</param>
        /// <returns>json字符串</returns>
        public static string ToJson(this object obj)
        {
            return JsonConvert.SerializeObject(obj, new JsonSerializerSettings { ReferenceLoopHandling = ReferenceLoopHandling.Ignore, DateFormatString = "yyyy-MM-dd HH:mm:ss" });
        }
    }

以上就是ASP.NET 通过拦截器记录错误日志的示例代码的详细内容,更多关于ASP.NET 记录错误日志的资料请关注脚本之家其它相关文章!

相关文章

  • .NET通过字典给类赋值实现代码

    .NET通过字典给类赋值实现代码

    这篇文章主要介绍了.NET通过字典给类赋值实现代码,代码简单易懂,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-09-09
  • .net socket客户端实例代码分享

    .net socket客户端实例代码分享

    这篇文章主要介绍了.net写的socket客户端,下面有使用方法,大家参考使用吧
    2013-12-12
  • IIS中ASP.NET连接SQL Server出错的解决方法

    IIS中ASP.NET连接SQL Server出错的解决方法

    在IIS中运行的ASP.NET应用程序其所属用户名为ASPNET的特定用户,其默认权限是无法访问SQL Server的,更不可能访问ASP.NET应用程序的数据库了,因此要在IIS中访问SQL Server就需要给ASPNET帐户赋予相应的权限.
    2010-03-03
  • .NET实用扩展方法详解

    .NET实用扩展方法详解

    这篇文章主要为大家详细介绍了.NET实用扩展方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-10-10
  • asp.net实现多个文件同时下载功能

    asp.net实现多个文件同时下载功能

    这篇文章主要为大家详细介绍了asp.net实现多个文件同时下载功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-04-04
  • 验证用户必选CheckBox控件与自定义验证javascript代码

    验证用户必选CheckBox控件与自定义验证javascript代码

    CheckBox控件,由于它的值是选择与非选择。因此在提交数据时,想让用户必须选择CheckBox,普通情况之下,不好做验证;但我们可以使用asp:CustomValidator来验证,不过还得写自定义验证Javascript代码
    2013-01-01
  • ASP.NET简单实现注销功能

    ASP.NET简单实现注销功能

    这篇文章主要介绍了如何ASP.NET简单实现注销功能的方法以及简单示例,有需要的小伙伴可以参考下。
    2015-07-07
  • 详解.Net core2.0日志组件Log4net、Nlog简单性能测试

    详解.Net core2.0日志组件Log4net、Nlog简单性能测试

    这篇文章主要介绍了详解.Net core2.0日志组件Log4net、Nlog简单性能测试,比较log4net、nlog的文件写入性能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-07-07
  • 防止重复提交 仅提交一次的终极绝杀技

    防止重复提交 仅提交一次的终极绝杀技

    防止重复提交,通用的思路,就是当用户点击提交按钮后,在浏览器中用JS将按钮disable掉,从而阻止用户继续点击该按钮,实现防止重复提交的目的。网上防止重复提交的文章已经不少了,为啥我还要写呢,显然我不是吃饱了撑的。。。
    2010-08-08
  • .Net Web Api中利用FluentValidate进行参数验证的方法

    .Net Web Api中利用FluentValidate进行参数验证的方法

    最近在做Web API,用到了流式验证,就简单的说说这个流式验证,下面这篇文章主要给大家介绍了关于.Net Web Api中利用FluentValidate进行参数验证的相关资料,,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧
    2018-07-07

最新评论