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

Flo*_*Flo 5 middleware asp.net-core-mvc asp.net-core

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

我的配置:

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);
}
Run Code Online (Sandbox Code Playgroud)

我的控制器:

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" };
    }
}
Run Code Online (Sandbox Code Playgroud)

我的中间件:

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

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

Joe*_*oey 1

我不知道这个问题是否已经过时,我今天遇到了同样的问题,我正在使用Casbin.Net包为我的asp dotnet core项目实现RBAC,我需要实现一个可以通过注释识别控制器的身份验证中间件[Authorize],所以只有这些控制器需要检查权限,其他控制器不需要,下面是我的代码

使用 casbin 与 asp dotnet core 的 rbac

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