ASP.NET Core 5 添加带有参数的操作过滤器

Posted

技术标签:

【中文标题】ASP.NET Core 5 添加带有参数的操作过滤器【英文标题】:ASP.NET Core 5 add action filter with parameter 【发布时间】:2022-01-21 14:50:14 【问题描述】:

尝试将身份验证过滤器添加到 ASP.NET Core 5 MVC 操作方法并传递参数。但是我无法找到一种方法来做到这一点。这是动作过滤器代码:

public class CheckUserPrivilege : IActionFilter

        private readonly IHttpContextAccessor _httpContextAccessor;
        private readonly ISession _session;
        public string PrivilegeCode  get; set; 

        public CheckUserPrivilledge(IHttpContextAccessor httpContextAccessor)
        
            _httpContextAccessor = httpContextAccessor;
            _session = _httpContextAccessor.HttpContext.Session;
        

我们需要传递的参数是PrivilegeCode。理想情况下想要像[CheckUserPrivilege("abc")] 这样的东西,但是当我们这样尝试时,我想它也会在构造函数中要求 IHttpContextAccessor` 参数。

任何帮助表示赞赏。

【问题讨论】:

【参考方案1】:

你不需要使用IHttpContextAccessor来获取参数,你只需要使用下面的代码:

public class CheckUserFilter : Attribute,IActionFilter
    
        
        private readonly string PrivilegeCode;
        public CheckUserFilter(string _PrivilegeCode)
        
            PrivilegeCode = _PrivilegeCode;
        
        public void OnActionExecuted(ActionExecutedContext context)
        
            //........
        

        public void OnActionExecuting(ActionExecutingContext context)
        
            //If you want to do somthing about context,
           // you just need to use`context.HttpContext.....`

            
        
    

当你尝试[CheckUserPrivilege("abc")]时,你可以得到过滤器中的值

【讨论】:

谢谢。似乎完成了这项工作

以上是关于ASP.NET Core 5 添加带有参数的操作过滤器的主要内容,如果未能解决你的问题,请参考以下文章

如何仅为 ASP.NET 5 (ASP.NET Core) 中的受保护操作添加令牌验证

如何在 ASP.NET Core 5 中使用 AuthenticationBuild.AddJwtBearer() 执行 JWT 颁发者验证时添加参数

我无法在 asp.net core spas 中添加带有角度 cli 的新组件

ASP .NET Core 2 控制器操作的 AJAX 参数

在 ASP.Net 5 / Core 中启用跨域资源共享 (CORS)

带有 EF Core 和 CosmosDB .NET 5 的 ASP.Net Core - IdentityRole 问题