我有一个使用表单身份验证的MVC和WebForms混合的站点。最近需要从使用WebForms切换到MVC处理身份验证,因此我使用Login方法创建了一个Account控制器并创建了相应的视图。如果某人已经过身份验证并尝试访问“account / login”,我希望将它们重定向到控制器的“索引”页面,以便在操作顶部显示以下if语句:
if(User.Identity.IsAuthenticated)
我的开发机器上的这个声明没有问题;但是,当我将其部署到服务器时,User对象始终为null。我搜索了stackoverflow和互联网的其余部分,还没有找到解决问题的任何东西。
我应该提一下,运行它的服务器是运行IIS7的Windows Server 2008 Standard。
任何人都对User对象为何始终为null有任何想法?我确实看到一个提到它的stackoverflow帖子是因为IIS处理无扩展路由的方式;但是,当我尝试安装该帖子中提到的KB时,它说KB不适用于我的服务器。
答案 0 :(得分:0)
好的 - 我终于弄明白了这个问题。
我发现这里的帖子(http://forums.asp.net/t/1689878.aspx?HttpContext+Current+User+always+null+on+IIS+)说这个问题是因为他们没有将runAllManagedModulesForAllRequests设置为true。我不希望该设置为true,所以我进行了一些搜索,并遇到了这个stackoverflow帖子:<modules runAllManagedModulesForAllRequests="true" /> Meaning
我在applicationHost.config文件中检查了我的条目,发现它具有&#34; managedHandler&#34;的前提条件。一旦我取消了这个先决条件,一切都开始按预期工作了。奇怪的是,在我的开发环境中,前提是存在,但它没有问题。也许是因为我的开发盒使用IIS 7.5,而服务器使用IIS 7.0。