【问题标题】:Migrating MVC 2 app from IIS 6 to IIS 7.5 = duplicate virtual directory将 MVC 2 应用程序从 IIS 6 迁移到 IIS 7.5 = 重复的虚拟目录
【发布时间】:2014-01-21 18:15:29
【问题描述】:

我已经阅读了所有带有 MVC 标记的帖子,但没有看到像我这样的问题,也没有找到任何可以让我找到解决方案的东西,所以我希望有人能指出我的方向。

我有一个 MVC 2 Web 应用程序在 Win 2003/IIS6 上的 Web 表单应用程序下运行,我正在迁移到 Win 2008/IIS7.5。我已阅读有关集成管道模式的信息,并对 Web 配置进行了更改,以包含用于 http 处理程序的“System.webserver”元素。 Default.aspx 页面加载然后将传入的“domain/site1/site2/default.aspx”请求重写为“domain/site1/site2/”,Homecontroller 执行并加载索引视图。问题是 Url.Content 和 Html.ActionLink 解析为“/site1/site2/site2/” - 注意重复的虚拟目录。重写没有改变 URL,所以我不知道是什么原因造成的。

这是来自 web.config 的 webserver 元素:

<system.webServer>
    <validation validateIntegratedModeConfiguration="true"/>

    <modules runAllManagedModulesForAllRequests="true">
        <remove name="ScriptModule"/>
        <remove name="UrlRoutingModule"/>
        <add name="ScriptModule" preCondition="managedHandler" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
        <add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web.Routing, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
    </modules>

    <handlers>
        <remove name="WebServiceHandlerFactory-Integrated"/>
        <remove name="ScriptHandlerFactory"/>
        <remove name="ScriptHandlerFactoryAppServices"/>
        <remove name="ScriptResource"/>
        <remove name="UrlRoutingHandler"/>
        <add name="ScriptHandlerFactory" verb="*" path="*.asmx" preCondition="integratedMode"
             type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
        <add name="ScriptHandlerFactoryAppServices" verb="*" path="*_AppService.axd" preCondition="integratedMode"
             type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
        <add name="ScriptResource" preCondition="integratedMode" verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
        <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>

这里是 RegisterRoutes 方法:

Shared Sub RegisterRoutes(ByVal routes As RouteCollection)
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}")


    routes.MapRoute( _
        "Default", _
        "{controller}.aspx/{action}/{id}", _
        New With {.controller = "Home", .action = "Index", .id = UrlParameter.Optional} _
    )
    routes.MapRoute( _
        "Root", _
        "", _
        New With {.controller = "Home", .action = "Index", .id = UrlParameter.Optional} _
    )
End Sub

AppPool 设置为集成模式,允许 32 位应用程序=True,Target Framework=2.0。
我还在 AppPool 上尝试了经典模式,但行为没有任何区别。

它在我的 Win7 开发盒上运行正常。有什么想法吗?

【问题讨论】:

    标签: asp.net-mvc-2 iis-7.5 virtual-directory


    【解决方案1】:

    在搜索 SO 和其他来源之后,我找到了 21228660/url-content-doesnt-resolve-absolute-path-on-one-server-but-does-on-another,这让我查看了 MVC 2 源代码。事实证明,在 PathHelper 类中,它检查指示 HTTP 重写的 HTTP 标头“HTTP_X_ORIGINAL_URL”。我在 RewritePath 语句之前的 Default.aspx 页面中添加了代码,以从 ServerVariables 集合中删除“HTTP_X_ORIGINAL_URL”,一切都很好!

    【讨论】:

      猜你喜欢
      • 2012-09-19
      • 1970-01-01
      • 2011-06-11
      • 2023-03-27
      • 2014-04-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多