如何在授权过滤器中使用redis缓存?

how to use redis cache in authorization filter?

我想将我的凭据存储在redis 缓存中以进行身份​​验证。为此,我创建了过滤器。但是我无法在过滤器中使用(注入)IDistributedCache。

public class Authorization : AuthorizeAttribute,IAuthorizationFilter
{
    IDistributedCache distributedCache;
    public void OnAuthorization(AuthorizationFilterContext filterContext)
    {
        //Authentication

        bool skipAuthorization = filterContext.Filters.Any(item => item is IAllowAnonymousFilter);
        if (skipAuthorization)
        {
            return;
        }
        try
        {

            string token = distributedCache.GetString("TokenValue");
            if (token == null)
            {
                // unauthorized!
                filterContext.Result = new UnauthorizedResult();
            }
        }
        catch (InvalidOperationException)
        {
            filterContext.Result = new UnauthorizedResult();
        }
    }
}

如果我为以上 class 生成构造函数并在构造函数中注入 IDistributedCache 那么我在使用该过滤器时遇到错误

那么有没有其他方法可以在过滤器中使用redis缓存?

当然可以生成一个构造器和IDistributedCache作为参数

然后您可以为这样的操作注册过滤器:[TypeFilter(typeof(Authorization))]

代码示例:

[HttpGet]
[TypeFilter(typeof(AuthorizationFilterAttribute))]
public ActionResult<IEnumerable<string>> Get()
{
    return new string[] { "value1", "value2" };
}