如何在授权过滤器中使用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" };
}
我想将我的凭据存储在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" };
}