【问题标题】:Asp.Net MVC Url.RouteUrl Problem on Windows 2003 vs. Visual Studio 2008Windows 2003 与 Visual Studio 2008 上的 Asp.Net MVC Url.RouteUrl 问题
【发布时间】:2009-02-13 20:32:40
【问题描述】:

我发现我的开发机器和部署服务器之间的 Url.RouteUrl 输出有所不同。我正在运行 Visual Studio 2008,我的部署框是 Windows 2003 Server。我已将 Global.asax.cs 配置为在路由表中使用 .aspx 扩展名运行。但是,当我使用“Search-Basic”命名路由时,Url.RouteUrl("Search-Basic", new {category = "Test", searchExpression = "search this"}) 没有输出

查看代码:

<%= Url.RouteUrl("Search-Basic", new {category = "test", searchExpression="search this"}) %>

Global.asax.cs 代码:

            // routes for IIS 6 and version below
        routes.MapRoute(
            "Search-Basic",
            "Search.aspx/Basic/{category}",
            new { controller = "Search", action = "Basic", category = "All" }
            );

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

        routes.MapRoute(
            "Root",
            "",
            new { controller = "Home", action = "Index", id = "" }
        );

在我的开发框中,我得到了预期的输出:/Search.aspx/Basic/Test?searchExpression=search%20this

但是,在我的部署服务器上,我根本没有得到任何输出。一个区别可能是我在部署服务器上的虚拟目录中运行应用程序。类似于:http://testmachine.com/sm/testappname/ 其中“/sm”是一个虚拟目录,“/testappname”是一个包含我的应用程序的虚拟目录。

有什么想法吗?

谢谢。

【问题讨论】:

  • Phil Hack 在他的博客上有一个工具可以帮助你进行路由调试haacked.com/archive/2008/03/13/url-routing-debugger.aspx
  • 当我使用路由调试器并输入 /Search.aspx/Basic 时,路由是通过命名路由“Search-Basic”处理的。但是,当我使用 BeginRouteForm("Search-Basic", new {category = "All"}) 时,我仍然得到
  • 好吧,这些错误甚至可能与 MVC 无关。好像我的开发服务器配置 /sm 虚拟目录根本不是虚拟目录。或者至少它在 IIS 6 中被定义为 IIsConfigObject。这似乎是我在 URL 输出中存在差异的原因。

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


【解决方案1】:

您是否正在运行相同版本的 ASP.NET MVC,因为 RC1(非刷新)中存在一个错误,当您有一个路由时会导致这种行为,例如路由中没有指定控制器:

另一个回归是在某些 情况下,RouteUrl(因此 RouteLink) 方法返回一个空 指定路由名称时的字符串, 但路由有默认参数 不是 URL 中的参数。

例如,如果您有以下情况 路线:

routes.MapRoute("route-name", "foo/bar", new {controller="Home", action="index"});

注意控制器有默认值 值,但不是 URL 的一部分。如果 然后你指定:

&lt;%= Url.RouteUrl("route-name") %&gt;

您可能期望它会使用 该路由来呈现 URL,但它 没有。这个错误是在什么时候引入的 我们重构了我们所有的 url 生成 助手调用一个通用的方法。 然而事实证明,我们的 RouteUrl 方法(又名非 MVC 具体)应该有细微的不同 行为比 MVC 特定方法 (例如动作)。我们添加了一个标志 常用的方法,这样 差异被考虑在内 考虑。这是一个修复 表面积不大。

http://haacked.com/archive/2009/01/30/aspnetmvc-refresh.aspx

【讨论】:

  • 我让我的安装人员检查签名上的日期。好建议,可能是原因。此外,如果让正常的 default.aspx 实现运行,当我运行 Html.ActionLink 或 Url.RouteUrl 时,我会得到一些 url 路径部分加倍,例如 testserver.com/sm/testappname/testappname。
  • 抱歉,即使使用了新的刷新 RC1,也没有解决问题。不过我还在调查。谢谢你的建议。
  • 好吧,这些错误甚至可能与 MVC 无关。好像我的开发服务器配置 /sm 虚拟目录根本不是虚拟目录。或者至少它在 IIS 6 中被定义为 IIsConfigObject。这似乎是我在 URL 输出中存在差异的原因。
猜你喜欢
相关资源
最近更新 更多
热门标签