如何在一个地方验证所有控制器的Request.Headers ["Authorization"]?

Fel*_*eza 7 c# .net-core asp.net-core

[HttpGet]
public IActionResult Get()
{
    string token = Request.Headers["Authorization"];
    // Validate token.
}

[HttpPost]
public IActionResult Post(int id)
{
    string token = Request.Headers["Authorization"];
    // Validate token.
}
Run Code Online (Sandbox Code Playgroud)

如何在一个地方验证所有控制器的Request.Headers ["Authorization"]?

mie*_*ooy 8

您可以创建和使用自定义中间件,您可以在其中检查标头并验证是否应将其传递给控制器​​.

要创建中间件类并在Startup.cs中对其进行同步,如下所示:

 public void Configure(IApplicationBuilder app, IHostingEnvironment env, IConnectionManager conn, ILoggerFactory loggerFactory)
 {
            app.UseMiddleware<YourMidllewareClass>();
 }
Run Code Online (Sandbox Code Playgroud)

在中间件类中创建Invoke方法.在每个请求跳转到任何控制器之前,将调用此方法.

 public async Task Invoke(HttpContext context)
        {
            string token = Request.Headers["Authorization"];
            //do the checking

            //pass request further if correct
            await _next(context);
        }
Run Code Online (Sandbox Code Playgroud)

就我而言,你必须在UseMvc()方法之前重新启动你的中间件,以确保在Mvc管道之前调用你的Invoke().