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

时间:2018-12-03 05:56:45

标签: filter .net-core stackexchange.redis

我想将凭据存储在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();
        }
    }
}

如果我为上述类生成了构造函数,并将IDistributedCache注入构造函数中,则在使用该过滤器时出现错误

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

1 个答案:

答案 0 :(得分:1)

确定可以生成构造函数和IDistributedCache作为参数

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

代码示例:

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