我原以为它会回归'真'或'假'......
我已经在我的控制器中覆盖了OnAuthorization,并且基于丢失或无效的HTTP Header值我想要返回403禁止,但我似乎无法弄清楚如何从OnAuthorization返回任何内容,以便它实际上将停止Controller的其余部分从跑步.
我该怎么办?
我下面的第一次尝试是一个巨大的失败,我认为Deny()正在运行,但没有任何反应......
public class AuthController : Controller
{
protected override void OnAuthorization(AuthorizationContext filterContext)
{
if (string.IsNullOrEmpty(filterContext.HttpContext.Request.Headers["Authorization"]))
Deny();
string authString = filterContext.HttpContext.Request.Headers["Authorization"];
base.OnAuthorization(filterContext);
}
private ActionResult Deny()
{
HttpContext.Response.StatusCode = 403;
return Content("Access Denied", "text/plain");
}
}
Run Code Online (Sandbox Code Playgroud)
UPDATE看起来像这样做了,为什么这可能是一个糟糕的方法?
if (string.IsNullOrEmpty(filterContext.HttpContext.Request.Headers["Authorization"]))
{
filterContext.Result = Content("Access Denied", "text/plain");
filterContext.HttpContext.Response.StatusCode = 403;
base.OnAuthorization(filterContext);
}
Run Code Online (Sandbox Code Playgroud)
再次更新好了所以现在它根本不工作......我放入一个断点,看着它进入if if语句,然后进入base.OnAuthorization(...)调用,然后再次向后退一步......如果它没有执行,它为什么会进入if语句?如果它正在执行为什么会调用base.OnAuthorization(...)不能尽早结束事情?