我本来希望它返回'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");
}
}
UPDATE 看起来像是在解决问题,这可能是一个不好的方法吗?
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/