我们在IIS7服务器上部署MVC应用程序时发现问题:任何路由导航都会出现404错误。我在网上发现问题可以通过将应用程序池管理的管道模式设置为集成来解决,但现在我们有例外:
Request is not available in this context
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.Web.HttpException: Request is not available in this context
Source Error:
Line 19:
Line 20: public override void SetActiveUser(Guid userOid) {
Line 21: FormsAuthentication.SignOut();
Line 22: HttpContext.Current.Items[Key] = userOid.ToString();
Line 23: FormsAuthentication.RedirectFromLoginPage(userOid.ToString(), true);
有人有什么想法吗?
答案 0 :(得分:10)
问题可能出在web.config文件中。从IIS7开始,现在有两个地方可以配置处理程序和模块。当您在经典模式下运行时,就像在IIS 6上运行一样(尽管在IIS7下)。
这是配置文件:
<system.web>
[...]
<httpHandlers>
[...]
</httpHandlers>
<httpModules>
[...]
<add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web.Routing, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
</httpModules>
</system.web>
应该只有IIS 6配置。
IIS 7配置应放在:
下 <system.webServer>
[...]
<modules runAllManagedModulesForAllRequests="true" >
<remove name="UrlRoutingModule"/>
<add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web.Routing, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
</modules>
<handlers>
<add name="UrlRoutingHandler" preCondition="integratedMode" verb="*" path="UrlRouting.axd" type="System.Web.HttpForbiddenHandler, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
</handlers>
</system.webServer>
答案 1 :(得分:1)
了解kvalcanti所说的话。标准路由是为IIS 7设计的。为旧版本的IIS添加了一个kludge。因此,如果您在旧版本上付费,那么您就拥有配置文件的kludged版本。更改配置可以解决问题。
除了kvalcanti提到的内容之外,你的global.asax中也有可能设置一些kludge。我不确定在最新版本的ASP.NET MVC中它是否仍然是强制性的,因为在过去的几个月里我没有除了Vista以外的所有东西。
这篇文章有一些见解: http://www.developingfor.net/aspnet-mvc/deploying-aspnet-mvc-on-iis6.html
Scott Guthrie在他的博客(http://weblogs.asp.net/scottgu/)上发表了一篇很棒的博客文章,但我没有给它添加书签。
答案 2 :(得分:-1)