3

我正在尝试使用我的新 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,然后添加了授权全局过滤器。一切都按预期工作,所以我比较了项目并发现了哪里出错了。希望此信息对某人有所帮助,但我对此表示怀疑,因为这是一个非常独特的案例。

4

1 回答 1

0

原来我刚刚错误地设置了我的全局过滤器。由于某种原因,RegisterGlobalFilters 方法在我的 global.asax 文件中,所以我的 FilterConfig.cs 文件没有以下行:

filters.Add(new System.Web.Mvc.AuthorizeAttribute()); I removed the method from my global.asax file then updated the FilterConfig.cs file with the above filter and everything is now working as expected. Not sure how I got into this situation, but I'm glad I figured it out.

Someone on the mvcSiteMapProvider GitHub project had mentioned that he had MVC4 and mvcSiteMapProvider working seamlessly, so I created a new MVC4 app and added the mvcSiteMapProvider before making any changes and then added the authorize global filter. Everything worked as expected, so I compared projects and found where I had gone wrong. Hopefully this info helps someone, but I doubt it as it's a pretty unique case.

于 2015-10-22T13:37:07.370 回答