【问题标题】:Azure website doesn't handle routing to '.asp' file extensionsAzure 网站不处理到“.asp”文件扩展名的路由
【发布时间】:2014-04-27 08:45:20
【问题描述】:

我的任务是重写一个用经典 asp 编写的旧网站,客户指定页面 URL 结构与旧网站相同(我知道我可以添加 301 重定向,但他们希望它看起来像现在一样)。

旧的“.asp”页面将不存在于服务器上,它根本不会运行经典的 asp,新站点是使用 MVC 5 构建的,它只需要旧的 URL。

我已经为特定的“网页”控制器创建了一个映射页面的路由,看起来它们具有如下的“.asp”文件扩展名,这在本地似乎可以正常工作 (IIS7)。

我的路线定义为:

routes.MapRoute(
    "WebPagesASP",
    "pages/{pagename}.asp",
    new { controller = "WebPages", action = "Details", pagename = UrlParameter.Optional }
    );

然而,一旦发布到 Azure 网站,我在尝试查看“asp”页面时收到以下错误。其他没有文件扩展名的路由可以正常工作,我也有一些到其他特定文件扩展名的路由可以按预期工作。

您无权查看此目录或页面。

我已尝试将以下内容添加到配置中以尝试捕获对 asp 文件的请求:

<system.webServer>
    <handlers>
      <add name="OldASPUrlRoutingHandler" type="System.Web.Routing.UrlRoutingHandler, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" path="*.asp" verb="GET"/>
    </handlers>
    <modules>
      <remove name="UrlRoutingModule" />
      <add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
    </modules>
</system.webServer>

同时设置&lt;modules runAllManagedModulesForAllRequests="true"&gt; 也不能解决问题。同样,这一切在本地都可以正常工作,但在发布到 Azure 网站时会失败。

该网站在 .Net 4.5.1 上使用 MVC 5.1.1 构建

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-4 azure asp.net-mvc-routing azure-web-app-service


    【解决方案1】:

    尝试删除ASPClassic处理程序并启用runAllManagedModulesForAllRequests

    <system.webServer>
        <modules runAllManagedModulesForAllRequests="true" />
        <handlers>
          <remove name="ASPClassic" />
        </handlers>
    </system.webServer>
    

    【讨论】:

    • 谢谢,我已经尝试过runAllManagedModulesForAllRequests='true',我还尝试按照您的建议删除 ASPClassic 处理程序,但仍然遇到同样的问题。
    • 您在问题中包含的代码仅删除了UrlRoutingModule。您是否也尝试删除 ASPClassic
    • 是的,我试过了,但还是有同样的问题,谢谢。
    【解决方案2】:

    您是否尝试过使用不同的模块类型?

    <add name="AspFileHandler" path="*.asp" verb="GET" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
    

    【讨论】:

      【解决方案3】:

      好吧,太尴尬了,这取决于我自己的设置。为了尝试加快开发速度,我从另一个项目的配置转换中复制了一组重写规则。这些规则中有以下内容:

      <rule name="Block unauthorised file extensions" stopProcessing="true" xdt:Transform="Insert">
          <match url=".*\.(exe|php|pl|phtml|inc|asp|dll|jsp)(/.*)?"/>
          <action type="CustomResponse" statusCode="403" />
      </rule>
      

      这会阻止任何 URL 以“.asp”结尾的请求,并返回 403 状态代码。

      让我感到惊讶的是,这在本地运行良好,这是有道理的,因为转换仅在发布时应用。

      我从正则表达式中删除了“|asp”,它工作正常。感谢您的回答。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-09
        • 1970-01-01
        • 1970-01-01
        • 2010-09-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多