如何检查请求是否转到具有[Authorize]属性的方法?

时间:2019-05-23 22:54:46

标签: c# asp.net-core asp.net-core-mvc

我有从 BaseController 派生的WebAPI Controller ,而 BaseController AspNetCore's Controller

派生

每当他进入需要User的端点时,我都想从数据库中加载[Authorize]

这是我的代码,其中if中的条件是伪代码,因为我不知道如何检查此请求是否需要授权

public class DefaultController : Controller
{
    protected readonly DatabaseContext _context;
    protected readonly User _user;

    public DefaultController(DatabaseContext context)
    {
        _context = context;

        if (HttpContext.Request.RequiresAuthorization) // pseudo code
        {
            var id = User.FindFirst(ClaimTypes.NameIdentifier).Value;
            _user = _context.Users.Find(id);
        }
    }
}

基本上,我希望避免在每个请求上加载用户,即使他不需要授权并且无法在该用户登录也可以。

是否有可能“全局地”实现,所以BaseController是每个其他控制器派生的吗?

1 个答案:

答案 0 :(得分:2)

您可以使用MvcOptions.Filters在全球范围内注册您的授权过滤器。

Startup.cs

public void ConfigureServices(IServiceCollection services)
 { 
      services.AddMvc(options =>
      {
           options.Filters.Add(typeof(AuthorizationFilter));
      });
 }

由于您需要连接数据库,因此建议您通过扩展AuthorizationFilter来创建自定义IAsyncAuthorizationFilter

public class AuthorizationFilter : IAsyncAuthorizationFilter
{
    //use constructor to inject required dependencies

    public async Task OnAuthorizationAsync(AuthorizationFilterContext context)
    {
         //Move your custom logic here
    }
}