.Net6 filter 的实现

.Net6 filter 的实现

//.NetCore 中的Filter 按照执行优先级排列
//权限过滤器:它在Filter Pipleline中首先运行,并用于决定当前用户是否有请求权限。如果没有请求权限直接返回。
IAuthorizationFilter
//资源过滤器: 它在Authorzation后面运行,同时在后面的其它过滤器完成后还会执行。Resource filters 实现缓存或其它性能原因返回。因为它运行在模型绑定前,所以这里的操作都会影响模型绑定。  据说都是在这里做缓存页面 ,我做的网站大多时效性较强,就没亲自实验,百度教程很多
IResourceFilter
//方法过滤器:它会在执行Action方法前后被调用。这个可以在方法中用来处理传递参数和处理方法返回结果。 (这个大家想必最常用了吧)
ActionFilterAttribute
//异常过滤器:被应用全局策略处理未处理的异常发生前异常被写入响应体
ExceptionFilterAttribute
//结果过滤器:它可以在执行Action结果之前执行,且执行Action成功后执行,使用逻辑必须围绕view或格式化执行结果。
ResultFilterAttribute

//program.cs注册

 Action<MvcOptions> filters = new Action<MvcOptions>(r=> {
                r.Filters.Add(typeof(MyAuthorization));
                r.Filters.Add(typeof(MyExceptionFilterAttribute));
                r.Filters.Add(typeof(MyResourceFilterAttribute));
                r.Filters.Add(typeof(MyActionFilterAttribute));
                r.Filters.Add(typeof(MyResultFilterAttribute));
            });
            
 
            services.AddMvc(filters) //注册全局过滤器
                .SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
 

注意注意 如果 filter 使用了构造函数注入参数 在局部使用的话就不能使用 直接打标签 要使用一下这种方式


public class MyActionFilterAttribute : ActionFilterAttribute
{
    private ILogger<MyActionFilterAttribute> _logger;
    public MyActionFilterAttribute(ILogger<MyActionFilterAttribute> logger)
    {
        this._logger = logger;
    }
    public override void OnActionExecuting(ActionExecutingContext context)
    {
        _logger.LogWarning("在这里执行了Action方法");//记录日志
    }
}

//没有用上面那种构造函数注入的话就可以正常打标签 设置过滤器  像这样 [MyActionFilter]
[TypeFilter(typeof(MyActionFilterAttribute))] //这时候需要这样使用
public class HomeController : Controller
{
    public IActionResult Index()
    {
        ViewBag.Now = DateTime.Now.ToString();
        return View();
    }
}


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值