【发布时间】:2011-07-22 20:27:39
【问题描述】:
我本来希望它返回 'true' 或 'false'...
我已经在我的控制器中覆盖了 OnAuthorization 并且基于丢失或无效的 HTTP 标头值我想返回 403 禁止,但是我似乎无法弄清楚如何从 OnAuthorization 返回任何内容,以便它实际上会停止其余的控制器的运行。
我该怎么办?
我在下面的第一次尝试是一个巨大的失败,我认为 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");
}
}
UPDATE 看起来像这样做了,为什么这可能是一个不好的方法?
if (string.IsNullOrEmpty(filterContext.HttpContext.Request.Headers["Authorization"]))
{
filterContext.Result = Content("Access Denied", "text/plain");
filterContext.HttpContext.Response.StatusCode = 403;
base.OnAuthorization(filterContext);
}
UPDATE AGAIN 好的,所以现在它根本不起作用...我设置了一个断点并观察它进入 if 语句,然后调用 base.OnAuthorization(...) ,然后再次退出......如果它没有执行,为什么它会进入 if 语句?如果它正在执行,为什么调用 base.OnAuthorization(...) 不会提前结束?
【问题讨论】:
-
您应该发布您的更新作为您自己问题的答案。
-
@BrianDriscoll 它停止工作:(
标签: asp.net-mvc-3 overriding onauthorization