【发布时间】:2020-02-19 15:20:54
【问题描述】:
我正在开发一个 ASP.net 核心 MVC 2.2 应用程序,目前我在控制器操作上使用经典的 [Authorize] 和 [AllowAnonymous] 属性来决定是否可以匿名访问某个操作或需要授权.
但是,我有一个要求,即仅当 http 请求中缺少某个标头时,某些操作才需要授权。通常我会通过简单地实现这一点:
[HttpGet]
[AllowAnonymous]
public IActionResult SomeAction()
{
if (!Request.Headers.ContainsKey("something"))
{
return RedirectToAction("SomeActionWithAuth");
}
...
}
[HttpGet]
[Authorize]
public IActionResult SomeActionWithAuth()
{
...
}
但是,在这种特殊情况下,我对避免重定向有严格的要求,所以我不能使用这种方法。
所以我的问题是:
- 有没有办法在请求到达控制器之前拦截请求,并在运行时根据每个请求决定请求是否需要身份验证?
- 如果这不可能,是否有办法在运行时决定将请求路由到哪个控制器/动作? (这样我就可以进行与上述类似的设置,两个操作具有不同的身份验证要求,但不会在客户端引起实际的 HTTP 重定向,这是我无法做到的)
【问题讨论】:
-
您只需编写自己的授权过滤器来替换
Authorize/AllowAnonymous过滤器。编写过滤器是rather straightforward。
标签: c# asp.net-core asp.net-core-mvc asp.net-core-2.0