【问题标题】:MVC3 Redirect to "Unauthorized" page not working?MVC3重定向到“未经授权”页面不起作用?
【发布时间】:2026-01-04 04:55:01
【问题描述】:

在向this question 询问授权后,我添加了一个新的自定义属性,试图将未经授权的用户重定向到一个页面,该页面包含有关请求访问等的更多详细信息。

public class RedirectAuthorize:AuthorizeAttribute
    {
        protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
        {
            //base.HandleUnauthorizedRequest(filterContext);

            filterContext.Result = new RedirectResult("Unauthorized");
        }
    }

我已经用这个属性和正确的 (Role="...") 装饰了我的 Home 控制器,并且这个“有效”......即它按预期命中方法。

我已在名为 Unauthorized.cshtml 的共享视图文件夹中添加了一个普通视图,但我只是收到“找不到资源”404 错误。

显示的 URL 似乎正确?

我的猜测是我需要指定控制器/动作而不是页面?但是错误处理程序重定向到Error.cshtml 而不需要控制器?

感谢您的帮助。

【问题讨论】:

    标签: c# asp.net-mvc-3 authorization


    【解决方案1】:

    问题是您正在使用RedirectResult,它会强制浏览器请求给定的 URL。但是当浏览器请求它时,没有匹配的路由。因此它会引发 404 错误。

    试试

    filterContext.Result = new ViewResult { ViewName = "Unauthorized" };
    

    【讨论】:

    • 如此简单,如此明显。 (那我为什么没想到呢!)