我们正在使用HttpModule挂钩到FormsAuthenticationModule并订阅Authenticate事件。当我们使用Web表单时,此事件将在模块中触发。当我们使用MVC时,此事件未触发。
我尝试使用控制器上的[Authorize]属性和web.config中的位置(即使这不是最佳做法)来尝试触发此事件,但它仍然没有。
使用Cassini网络服务器时会触发该事件,但不会在IIS 7.5或IIS Express上触发。我们使用.NET 3.5运行ASP.NET MVC 2
修改
当我们请求.aspx或.ashx文件时,将触发Authentication事件。如果我们请求无扩展名文件或.css或.js,它也不会触发。
新的ASP.NET MVC应用程序将为每个请求的文件触发此事件。
有什么建议吗?
答案 0 :(得分:2)
我们的web.config缺少来自system.webServer中的modules元素的 runAllManagedModulesForAllRequests =“true”。添加完成后,所有Web请求都会从FormsAuthenticationModule接收Authorization事件。
<system.webServer>
....
<modules runAllManagedModulesForAllRequests="true">
....
</system.webServer>
答案 1 :(得分:2)
导航到aspx页面不会测试表单身份验证是否在MVC中有效,您必须导航到路由。我看到了你的答案,这就是我的想法。而不是效率低runAllManagedModulesForAllRequests="true"
我建议删除managedHandler前提条件:
<remove name="FormsAuthentication"/>
<add name="FormsAuthentication" preCondition="" type="System.Web.Security.FormsAuthenticationModule"/>
<remove name="DefaultAuthentication"/>
<add name="DefaultAuthentication" preCondition="" type="System.Web.Security.DefaultAuthenticationModule"/>
<remove name="RoleManager"/>
<add name="RoleManager" preCondition="" type="System.Web.Security.RoleManagerModule"/>
<remove name="UrlAuthorization"/>
<add name="UrlAuthorization" preCondition="" type="System.Web.Security.UrlAuthorizationModule"/>
<remove name="UrlRoutingModule-4.0"/>
<add name="UrlRoutingModule-4.0" preCondition="runtimeVersionv4.0" type="System.Web.Routing.UrlRoutingModule"/>
答案 2 :(得分:0)
我认为这不是解决问题的最佳方法,但我也使用了MVC和formpages的组合,并在web.config中设置了所有授权。
<location path="[path]">
<system.web>
<authorization>
<allow users="[username]" roles="[role]"/>
<deny users="*"/>
</authorization>
</system.web>
</location>