我正在尝试使用我的新MVC4网站实现MvcSiteMapProvider,但我遇到了一些我似乎无法修复的问题。
我使用Active Directory设置授权(当前没有角色提供程序),一切正常。当您尝试访问登录页面以外的任何页面时,您将被重定向到登录页面。 Account控制器的操作方法具有[allowAnonymous]属性,允许未经身份验证的用户访问它们,以便他们可以登录。
由于某些未知原因,将MvcSiteMapProvider添加到项目会阻止此工作,现在未经身份验证的用户可以访问任何页面。 MvcSiteMapProvider创建的菜单正常工作,只有经过身份验证的用户才能看到它,但如果未经身份验证的用户键入直接链接,则不会像过去那样将其重定向到登录页面。
我已从项目中删除了MvcSiteMapProvider,并且身份验证开始再次正常运行。 我相信这与MvcSiteMapProvider以某种方式覆盖authorizeAttribute过滤器有关,但我无法弄清楚在哪里/如何。
我可以将[Authorize]放在控制器之上,重定向可以与MvcSiteMapProvider一起使用,但这与使用MVC4的全部原因有关。
//this is supposed to set authorize for the entire app
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new System.Web.Mvc.AuthorizeAttribute());
}
我觉得这个问题来自MvcSiteMapProvider / External / AuthorizeAttributeBuilder.cs,但我没有足够的经验来解决这个问题。
更新: 事实证明我刚刚错误地设置了我的全局过滤器。由于某些原因,RegisterGlobalFilters方法在我的global.asax文件中,所以我的FilterConfig.cs文件没有这行:
filters.Add(new System.Web.Mvc.AuthorizeAttribute());
我从我的global.asax文件中删除了该方法,然后使用上面的过滤器更新了FilterConfig.cs文件,现在所有内容都按预期工作了。不知道我是如何陷入这种情况的,但我很高兴我明白了。
mvcSiteMapProvider GitHub项目的某个人提到他有MVC4和mvcSiteMapProvider无缝工作,所以我创建了一个新的MVC4应用程序并在进行任何更改之前添加了mvcSiteMapProvider,然后添加了授权全局过滤器。一切都按预期工作,所以我比较了项目,找到了我出错的地方。希望这些信息有助于某人,但我怀疑它是一个非常独特的案例。
答案 0 :(得分:0)
事实证明我刚刚错误地设置了我的全局过滤器。由于某些原因,RegisterGlobalFilters方法在我的global.asax文件中,所以我的FilterConfig.cs文件没有这行:
filters.Add(new System.Web.Mvc.AuthorizeAttribute()); 我从我的global.asax文件中删除了该方法,然后使用上面的过滤器更新了FilterConfig.cs文件,现在所有内容都按预期工作。不知道我是怎么进入这种情况的,但我很高兴我明白了。
mvcSiteMapProvider GitHub项目的某个人提到他有MVC4和mvcSiteMapProvider无缝工作,所以我创建了一个新的MVC4应用程序,并在进行任何更改之前添加了mvcSiteMapProvider,然后添加了授权全局过滤器。一切都按预期工作,所以我比较了项目,找到了我出错的地方。希望这些信息有助于某人,但我怀疑它是一个非常独特的案例。