gpt4 book ai didi

c# - 如何在一个地方为所有 Controller 验证 Request.Headers ["Authorization"]?

转载 作者:太空狗 更新时间:2023-10-29 20:09:24 28 4
gpt4 key购买 nike

[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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com