Asp.Core Mvc的Aop && Filter

本文介绍了如何在.NET Core MVC中实现自定义异常过滤器,并通过依赖注入注入日志服务。重点讲解了如何使用ServiceFilterAttribute生成实例并配置到控制器中。

一、Core Mvc 拦截器

  1. .net frameWork mvc中一样,首先需要继承重写实现框架定义的ExceptionFilterAttribute
  2. 特性是在编译时确定,所以对于需要注入实例到特性中,需要由容器生成,使用ServiceFilterAttribute并在ConfigureServices中添加

实现带注入的异常拦截器

   
    //利用容器生成注入服务
    public void ConfigureServices(IServiceCollection services)
     {
        services.AddScoped(typeof(CustomExceptionFilterAttribute));
     }
   
    //实现拦截器
    public class CustomExceptionFilterAttribute : ExceptionFilterAttribute
    {
        private HttpRequest httpRequest = null;
        private readonly ILogger<CustomExceptionFilterAttribute> _logger;
        //注入日志组件
        public CustomExceptionFilterAttribute(ILogger<CustomExceptionFilterAttribute> logger)
        {
            this._logger = logger;
        }
        
        public override void OnException(ExceptionContext context)
        {
            this.httpRequest = context.HttpContext.Request;
            if (!context.ExceptionHandled)
            {
                if (this.IsAjax)
                {
                    context.Result = new JsonResult(new
                    {
                        Result = false,
                        msg = context.Exception.Message
                    }); ;
                }
                else
                {
                    context.Result = new RedirectResult("/Home/Index");
                }
                context.ExceptionHandled = true;
            }
        }
        private bool IsAjax
        {
            get
            {
                string header = this.httpRequest.Headers["X-Requested-With"];
                return "XMLHttpRequest".Equals(header);
            }
        }
    }
    
     //由于拦截器需要注入日志服务,不能直接传引用类型,所以需要使用ServiceFilterAttribute利用容器生成
     [ServiceFilterAttribute(typeof(CustomExceptionFilterAttribute))]
     public IActionResult Index(){}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值