如何在Controller之类的AuthorizeFilter中使用Memory Cache?

时间:2017-10-11 10:18:44

标签: asp.net-core action-filter

我有一个全局的AuthorizeFilter如下:

public class MyAuthorizationFilter : AuthorizeFilter { 

     public MyAuthorizationFilter(Authorization policy) : base(policy) { }

     public override Task OnAuthorizationAsync(AuthorizationFilterContext context) { ... }

}

我在Startup.cs中做了什么:

services.AddMvc(x => {
     x.Filters.Add(new MyAuthorizationFilter(new AuthorizationPolicyBuilder().RequireAuthenticateUser().Build())); 
});

我也添加了服务

services.AddMemoryCache();

过滤器似乎不支持DI控制器的方式。

感谢。

1 个答案:

答案 0 :(得分:2)

在asp.net核心中,支持依赖注入过滤器。阅读"依赖注入"在官方文档中。 Filters in ASP.Net Core

您需要实施服务过滤器或类型过滤器。

解决该服务的另一种方法是

var service = filterContext.HttpContext.RequestServices.GetService<IMemoryCache>();