10

设置(使用 MVC 4)

public class MyAuthorizeAttribute : AuthorizeAttribute {

    protected override bool AuthorizeCore(HttpContextBase httpContext) {

        var isAuthorised = base.AuthorizeCore(httpContext);

        if(isAuthorised) {
            // retrieve authentication ticket from cookie and
            // create custome principal and attach to 
            // httpContext.User
        }

        return isAuthorised;
    }
}

Gloabl.asax.cs:

public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
    filters.Add(new HandleErrorAttribute());
    filters.Add(new MyAuthorizeAttribute());
}

HomeController.cs:

using System.Web.Mvc;

public class HomeController : Controller
{
    [AllowAnonymous]
    public ActionResult Index()
    {
        return View();
    }
}

问题

调用主页会强制加载登录页面。

问题

当 HomeController.Index() 动作用 [AllowAnonymous] 修饰时,为什么 ASP 将我重定向到登录视图?

我正在使用这篇文章作为参考

4

4 回答 4

11

根据我对原始问题的评论。问题是索引视图在返回部分视图的其他控制器上调用操作。只是遍历所有内容并删除旧的 [Authorize] 属性的情况。

于 2012-06-15T07:51:50.323 回答
5

尽管原始发帖人已经在他的案例中找到了原因,但我想分享我的解决方案,因为我在遇到相同症状时遇到了这个问题。

在我的 web.config 文件中,遵循 webforms 的逻辑:

<authorization>
  <deny users="?" />
</authorization>

你不能有这个,因为它会阻止请求在没有首先登录的情况下执行任何操作,除了发生重定向的登录操作。我只是在尝试添加第二个公共操作时才发现这一点。

于 2013-06-28T15:13:33.430 回答
2

我有类似的问题,最后我使用了错误的AllowAnonymousAttribute课程。有两个 AllowAnonymousAttribute 类:

在您的情况下,您当然必须使用来自System.Web.Mvc:)

我花了一个多小时在我的程序中弄清楚

于 2012-11-22T13:19:32.507 回答
-1

虽然这不是一个答案,但..

尝试使用内置Authorize代码并确保AllowAnonymous工作正常。我在您尝试的自定义授权评论中看到

从 cookie 中检索身份验证票证并创建客户主体并附加到 httpContext.User

我建议您在此线程Application_AuthenticateRequestGlobal.asax.cs指定的早期执行该过程。

于 2012-06-14T13:12:16.757 回答