[HttpGet]
public IActionResult Get()
{
string token = Request.Headers["Authorization"];
// Validate token.
}
[HttpPost]
public IActionResult Post(int id)
{
string token = Request.Headers["Authorization"];
// Validate token.
}
如何在一个地方为所有 Controller 验证 Request.Headers["Authorization"]?
最佳答案
您可以创建和使用自定义中间件,您可以在其中检查 header 并验证它是否应该传递给 Controller 。
为了实现创建中间件类并将其注册到 Startup.cs 中,如下所示:
public void Configure(IApplicationBuilder app, IHostingEnvironment env, IConnectionManager conn, ILoggerFactory loggerFactory)
{
app.UseMiddleware<YourMidllewareClass>();
}
在中间件类中创建 Invoke 方法。在每个请求跳转到您的任何 Controller 之前,将调用此方法。
public async Task Invoke(HttpContext context)
{
string token = context.Request.Headers["Authorization"];
//do the checking
if (token == null)
{
context.Response.StatusCode = 401;
await context.Response.WriteAsync("Access denied!");
return;
}
//pass request further if correct
await _next(context);
}
据我所知,您必须在 UseMvc() 方法之前注册您的中间件,以确保您的 Invoke() 将在 Mvc 管道之前被调用。
关于c# - 如何在一个地方为所有 Controller 验证 Request.Headers ["Authorization"]?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45494937/