MVC - Корень приложения появляется дважды в URL, используя Url.Content / Url.Action - PullRequest
2 голосов
/ 07 февраля 2010

У меня есть несколько приложений MVC в одном домене, у каждого есть свой каталог.

mydomain.com / app1
mydomain.com/app2
и т.д ..

При использовании Url.Content () и Url.Action () на корневом уровне часть 'app1' повторяется дважды в URL.

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

application root appears once - everything works as expected 

мои маршруты - я использую маршруты из Phil haacks пост в блоге

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

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

Есть идеи?

Ответы [ 2 ]

3 голосов
/ 07 февраля 2010

Это связано с тем, что приложения обрабатывают 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");

0 голосов
/ 24 мая 2013

Когда у меня возникла эта проблема, это было потому, что кто-то использовал атрибут RouteArea["app1"] на контроллере, но включил его в действие GET["apps1/Detail"] вместо просто GET["Detail"]

...