【发布时间】: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