asp.net-mvc-3 - 如果 Controller.OnAuthorization() 返回 void 那么我如何拒绝访问?

标签 asp.net-mvc-3 overriding onauthorization

我希望它返回“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/

相关文章:

c# - TextBoxFor - 显示错误值

java - 如何从 Java 父类(super class)内部调用重写方法的父类(super class)实现?

java - 如何覆盖java变量并使变量成为必填字段

java - ArrayList 不使用重写的 equals

asp.net-web-api - 如何使用 Microsoft.Owin.Security 自定义 System.Web.Http.AuthorizeAttribute?

asp.net-mvc - ASP.Net MVC 3 - HandleError 属性中的顺序似乎向后工作?

asp.net-mvc-3 - asp mvc 3 ActionFilter用于基本身份验证

c# - 单个 View 中的多个模型 (C# MVC3)