设置(使用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会将我重定向到登录视图?
我正在使用this文章作为参考
答案 0 :(得分:11)
根据我对原始问题的评论。问题是索引视图是在返回部分视图的其他控制器上调用操作。只是一个经历所有事情并剥离旧的[授权]属性的案例。
答案 1 :(得分:5)
虽然原始海报在他的案例中找到了原因,但我想分享我的决议,因为我在遇到相同的症状时遇到了这个问题。
在我的web.config文件中,遵循webforms的逻辑:
<authorization>
<deny users="?" />
</authorization>
您不能拥有此权限,因为除了重定向发生的登录操作之外,它将阻止请求在未先登录的情况下执行任何操作。当我试图添加第二个公共行动时,我才发现了这一点。
答案 2 :(得分:2)
我有类似的问题,最后我使用了错误的AllowAnonymousAttribute
类。有两个AllowAnonymousAttribute类:
在你的情况下,你必须使用System.Web.Mvc
中的那个:)
我花了一个多小时才在我的程序中找到它
答案 3 :(得分:-1)
虽然这不是答案但是......
尝试使用内置的Authorize
代码,并确保AllowAnonymous
正常运行。我在你的自定义授权评论中看到了
从cookie检索身份验证票证并创建客户 principal并附加到httpContext.User
我建议您在此thread中指定的Application_AuthenticateRequest
Global.asax.cs
中更早地执行此过程。