【问题标题】:ASP.NET MVC2 Routing IIS6 - only default routes workASP.NET MVC2 路由 IIS6 - 只有默认路由有效
【发布时间】:2011-05-12 08:36:06
【问题描述】:

我在运行 IIS 6 的 Windows Server 2003 机器上部署了一个 ASP.NET MVC2 网站。 我在标准 MVC 项目中几乎使用了默认路由:

public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            "Default", // Route name
            "{controller}/{action}/{id}", // URL with parameters
            new { controller = "Products", action = "List", id = UrlParameter.Optional } // Parameter defaults
        );

    }

导航到http://localhost/MyApplication 将我带到列表页面就好了。导航到http://localhost/MyApplication/Products/Details/21 给了我一个 404。这个路由在 VS2010 的内置开发服务器上运行良好。

我已经把提到的标准 IIS 通配符 aspnet_isapi.dll 映射放在了整个地方 - 在我之前导航到列表页面不起作用 - 但是导航到默认路由以外的任何地方都被破坏了。

我真的很想保留我的无扩展名网址。有没有人知道为什么路由适用于默认网页,但没有其他人?

*编辑:刚刚尝试添加 .aspx 扩展名,即现在我的路线如下所示:

        routes.MapRoute(
            "Default", // Route name
            "{controller}.aspx/{action}/{id}", // URL with parameters
            new { controller = "Downtime", action = "List", id = UrlParameter.Optional } // Parameter defaults
        );

它具有相同的行为,除了这次我得到的是 asp 404 页面而不是 html 404 页面......

*编辑 2:使用以下路线再次尝试并确保 .mvc 已映射到 aspnet_isapi.dll:

        routes.MapRoute(
            "Default", // Route name
            "{controller}.mvc/{action}/{id}", // URL with parameters
            new { controller = "Downtime", action = "List", id = UrlParameter.Optional } // Parameter defaults
        );

这次我得到了一个“Internet Explorer 无法显示网页”的 404 样式页面。我现在使用这 3 种不同的方法得到了 3 种不同的 404 错误...

*Edit 3 编辑返回:我的站点在 Windows XP Professional 上的 IIS 5.1 中运行,虚拟目录上只有一个通配符重新映射,但我不能让它在网络服务器上运行...

【问题讨论】:

    标签: asp.net-mvc iis-6 asp.net-mvc-routing default


    【解决方案1】:

    首先,您应该遵循以下演练:http://haacked.com/archive/2008/11/26/asp.net-mvc-on-iis-6-walkthrough.aspx

    (只是为了确保您没有错过任何东西)。这显示了如何使无扩展和扩展版本工作。您可能至少要检查扩展的版本是否可以检查其他内容是否配置错误。

    在那之后,也许你应该尝试添加这样的东西..

    http://haacked.com/archive/2008/03/13/url-routing-debugger.aspx

    ...因为它确实可以帮助确定您的路线在哪里中断。

    需要检查的其他事项:

    • IIS 是否配置了 ASP.NET?检查虚拟目录的属性。在 VDir 上选择配置按钮并检查通常的 ASP.NET 扩展是否映射到 .NET 2.0 ISAPI dll。这将类似于

      C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll。

    • 是否在 IIS 上启用了 ASP.NET 2(在 IIS 6 下默认关闭):在 IIS 管理器中检查 Web 服务扩展文件夹以启用它。

    • 您是否部署了 global.asax?

    【讨论】:

    • 我已经按照 IIS6 无扩展 URL 的确切演练中的部分进行了操作(因此我提到了“到处都提到的标准 IIS 通配符 aspnet_isapi.dll 映射”),但它仍然不会t 路由到默认值以外的任何东西。
    • 刚刚编辑了父级 - 将扩展名添加到我的 URL 没有帮助。无扩展方法在开发服务器上工作。如果路由正确但 IIS 6 处理它的方式有问题,该路由调试器会有所帮助吗?
    • 所有标准的应用程序扩展都在那里,并映射到aspnet_isapi.dll,IIS Web Service Extensions中允许使用ASP.net 2.0.etc,并将global.asax部署在虚拟目录中。感谢您的建议,但我仍然不知所措。我试图思考导航到 h ttp://localhost/MyApp 根目录实际上是什么意思,它会打开一个必须通过默认路由定向到的页面(它不称为默认或索引,它是未配置为默认内容页面) - 但没有其他功能。
    • 找到了 - 见下文。有没有什么办法可以让我给你加分,让你有帮助并给出简洁、相关的建议,即使答案被证明是别的东西?
    【解决方案2】:

    找到了 - 路由确实有效,但我的 URL 没有。我使用 javascript 构建了一些 URL,结果发现我没有链接到

    http://localhost/MyApplication/Controller/Action/ID

    我实际上是链接到

    http://localhost/Controller/Action/ID

    像这样构建链接在开发服务器上工作,但是一旦将站点部署到网络服务器上的虚拟目录,这些地址就会不正确,因为 URL 中有额外的应用程序名称。

    总之,小心你的 URL - 不要像我一样用字符串构建它们。

    【讨论】:

      猜你喜欢
      • 2017-01-19
      • 1970-01-01
      • 2011-04-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-01
      • 2021-05-02
      相关资源
      最近更新 更多