您好我想从中间件类中的控制器方法检查注释。
我的配置:
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中,我想检查被调用的方法是否具有特定的注释。
答案 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
中间件。