我希望它返回“true”或“false”...
我已经在我的 Controller 中覆盖了 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");
}
}
更新看起来这成功了,有什么理由说明这可能是一个不好的方法吗?
if (string.IsNullOrEmpty(filterContext.HttpContext.Request.Headers["Authorization"]))
{
filterContext.Result = Content("Access Denied", "text/plain");
filterContext.HttpContext.Response.StatusCode = 403;
base.OnAuthorization(filterContext);
}
再次更新 好吧,现在它根本不起作用...我设置了一个断点,并看着它进入 if 语句,然后进入 base.OnAuthorization(...) 调用,然后再次退出...如果它没有执行,为什么会进入 if 语句?如果它正在执行,为什么调用 base.OnAuthorization(...) 不会提前结束事情?
最佳答案
你可以抛出一个httpException:
throw new HttpException(403, "Access Denied");
关于asp.net-mvc-3 - 如果 Controller.OnAuthorization() 返回 void 那么我如何拒绝访问?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6795746/