中间件从控制器方法检查注释

时间:2016-12-15 10:48:03

标签: asp.net-core asp.net-core-mvc middleware

您好我想从中间件类中的控制器方法检查注释。

我的配置:

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory, BackendDbContext context)
{
    loggerFactory.AddConsole(Configuration.GetSection("Logging"));
    loggerFactory.AddDebug();
    app.UseStaticFiles();
    app.UseMiddleware<AuthMiddleware>();
    app.UseMvc();

    BackendDbInitializer.Init(context);
}

我的控制器:

Route("api/[controller]")]
public class UserController : Controller
{
    private readonly BackendDbContext _context;

    public UserController(BackendDbContext context)
    {
        _context = context;
    }

    // GET api/values
    [HttpGet]
    [NoAuth]
    public IEnumerable<string> Get()
    {
        return new string[] { "value1", "value2" };
    }
}

我的中间件:

public class AuthMiddleware 
{
    private readonly RequestDelegate _next;

    public AuthMiddleware(RequestDelegate next)
    {
        _next = next;
    }

    public async Task Invoke(HttpContext context)
    {

        //Here i want to check if the called method in UserController have a annotation...
        await _next.Invoke(context);
    }
}

在AuthMiddleware中,我想检查被调用的方法是否具有特定的注释。

1 个答案:

答案 0 :(得分:0)

我不知道这个问题是否过时,我今天遇到了同样的问题,我正在使用Casbin.Net包为我的asp dotnet核心项目实现RBAC,我需要实现一个auth中间件可以识别带有[Authorize]注释的控制器,因此只有这些控制器需要检查权限,其他控制器则不需要,以下是我的代码

rbac with asp dotnet core using casbin

您可以忽略依赖项注入和casbin部分,在AuthzMiddleware.cs中,我使用context.User.Claims.Count() > 0来检查当前请求是否已通过Authentication中间件。