ASP.net MVC全局授权筛选器强制在异名操作上登录

ASP.net MVC全局授权筛选器强制在异名操作上登录,asp.net,asp.net-mvc,security,authentication,forms-authentication,Asp.net,Asp.net Mvc,Security,Authentication,Forms Authentication,设置(使用MVC 4) 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

设置(使用MVC 4)

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会将我重定向到登录视图


我用这篇文章作为参考

虽然这不是答案,但

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

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


我建议您在
Global.asax.cs
应用程序\u AuthenticateRequest
中尽早执行此过程。

根据我对原始问题的评论。问题是索引视图正在对返回部分视图的其他控制器调用操作。这只是一个检查所有内容并去掉旧的[Authorize]属性的例子。

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

  • 一个来自
    System.Web.Http
  • 另一个来自
    System.Web.Mvc
在您的情况下,当然必须使用
System.Web.Mvc
:)中的一个


我花了一个多小时的时间在我的节目中找出了原因

虽然原始海报已经找到了他的原因,但我想分享我的解决方案,因为我在面对同样的症状时遇到了这个问题

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

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


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

我刚刚检查了内置授权,它对我来说运行良好。可能您必须检查您的自定义授权代码。我已尝试使用内置授权属性,替换了添加到my global.asax中全局筛选器的属性,但在主控制器上调用索引操作时,我仍被重定向到登录页面。我错过什么了吗?我的web配置中的某些设置?我没有配置成员资格提供程序、角色提供程序或配置文件提供程序。我需要吗?web.config中的表单身份验证设置是重定向到登录页面的设置。但您不需要添加其他设置。我尝试创建一个新的MVC 4应用程序/互联网模板,用AllowAnonymous标记主控制器的授权和索引操作,并按预期工作。感谢您确认一切都按预期工作Mark。我回到了基础,创建了一个简单的互联网应用程序,它确实可以工作。这让我调查了其他原因。事实证明,索引页正在对返回部分视图的其他控制器调用操作。我经历了每一个被调用的动作,并应用了正确的属性,你是对的,它确实有效。非常感谢你的帮助。持久性和努力得到了回报。根据我上面的评论,我已经尝试使用AuthorizeAttribute,但仍然重定向到登录。给出了什么?如果这解决了问题,请将其标记为答案。你可以回答自己的问题。很棒的发现!这一次我的头撞到了墙上!无法理解为什么我会“注销”,返回主页会自动带我再次完成登录过程。非常感谢。我也做了同样的事。当添加另一个公共行为时发现。感谢添加此,刚刚帮助我,发布四年后!
<authorization>
  <deny users="?" />
</authorization>