MVC - 应用程序根目录在url中使用Url.Content / Url.Action出现两次

时间:2010-02-07 18:11:58

标签: asp.net-mvc routes asp.net-mvc-routing

我在同一个域上有几个mvc应用程序,每个都有自己的目录。

mydomain.com/app1
mydomain.com/app2
等。

在根级别使用Url.Content()和Url.Action()时,“app1”部分会在网址中重复两次。

// code used to generate the links
<%= Url.Action("tetris", "Apps") %>
Page Url:               mydomain.com/app1/
rendered link (broken): mydomain.com/app1/app1/Apps.aspx/tetris

application root appears twice in the rendered url when at the root directory
Page Url:               mydomain.com/app1/home.aspx/
rendered link (works):  mydomain.com/app1/Apps.aspx/tetris

application root appears once - everything works as expected 

我的路线 - 我正在使用Phil haacks blog post

中的路线
routes.MapRoute(
    "Default",
    "{controller}.aspx/{action}/{id}",
    new { action = "Index", id = "" }
);

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

有什么想法吗?

2 个答案:

答案 0 :(得分:3)

这是因为应用程序按内部最大导向到最外层目录的顺序处理web.configs。

您有两种方法可以解决此问题。

  1. 指定要在根目录或子目录中应用路由的名称空间。 http://msdn.microsoft.com/en-us/library/dd504958.aspx

    routes.MapRoute(     “根”,“”,新{...},     new [] {“MyNamespace.For.Root”} );

  2. 或者在根目录中将子目录指定为忽略的路由使用。 http://msdn.microsoft.com/en-us/library/dd505203.aspx

    routes.IgnoreRoute( “/ APP1”); routes.IgnoreRoute( “/ APP2”);

答案 1 :(得分:0)

当我遇到此问题时,是因为有人在控制器上使用了RouteArea["app1"]属性,但也将其包含在操作GET["apps1/Detail"]中而不仅仅是GET["Detail"]