首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果Controller.OnAuthorization()返回“无效”,那么如何拒绝访问?

如果Controller.OnAuthorization()返回“无效”,那么如何拒绝访问?
EN

Stack Overflow用户
提问于 2011-07-22 20:27:39
回答 5查看 5.9K关注 0票数 6

我原以为它会返回“真”或“假”.

我在Controller中重写了OnAuthorization,并且基于丢失或无效的Header值,我希望返回禁止的403,但是我似乎不知道如何从OnAuthorization返回任何内容,这样它实际上将阻止Controller的其他部分运行。

我该怎么办?

我在下面的第一次尝试是一个巨大的失败,我认为否认()正在运行,但什么都没有发生.

代码语言:javascript
复制
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看起来是这样做的,为什么这可能是一个糟糕的方法呢?

代码语言:javascript
复制
    if (string.IsNullOrEmpty(filterContext.HttpContext.Request.Headers["Authorization"]))
    {
        filterContext.Result = Content("Access Denied", "text/plain");
        filterContext.HttpContext.Response.StatusCode = 403;

        base.OnAuthorization(filterContext);
    }

再次更新,,ok,所以现在根本不起作用了.我输入了一个断点,并看着它进入if语句,然后到达base.OnAuthorization(.)打电话,然后再出来.如果它没有执行,它为什么要进入if语句?如果它正在执行,为什么要调用base.OnAuthorization(.)不是早点结束吗?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-07-28 20:38:01

您可以抛出httpexception:

代码语言:javascript
复制
throw new HttpException(403, "Access Denied");
票数 9
EN

Stack Overflow用户

发布于 2011-09-02 11:16:30

关于?

代码语言:javascript
复制
throw new UnauthorizedAccessException();
票数 4
EN

Stack Overflow用户

发布于 2011-08-17 13:08:56

另一种保护应用程序的方法:保护您的ASP.NET MVC 3应用程序

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6795746

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档