我本来希望它返回'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/

10-11 19:39