我想将凭据存储在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缓存吗?
答案 0 :(得分:1)
确定可以生成构造函数和IDistributedCache作为参数
然后,您可以为以下操作注册过滤器:[TypeFilter(typeof(Authorization))]
代码示例:
[HttpGet]
[TypeFilter(typeof(AuthorizationFilterAttribute))]
public ActionResult<IEnumerable<string>> Get()
{
return new string[] { "value1", "value2" };
}