2014-10-10 2 views
4

Если я создаю ссылку на действие MVC или действие, например. @Url.Action("Index", "Home")" Я перенаправляюсь на http://www.example.com, но я хочу, чтобы он перенаправлял на http://www.example.com/Home/Index или http://www.example.com/Home. Есть ли способ явно сделать полный путь? Мои поисковые запросы Google выглядят пустыми.Как заставить MVC маршрутизировать в Home/Index вместо root?

ответ

4

Url.Action() использует маршрутизацию для создания URL-адреса. поэтому, если вы хотите изменить его, вы должны изменить это. В настоящее время он говорит, что контроллер по умолчанию - Home, а действие по умолчанию - Index. Измените их на что-нибудь еще, и затем он даст вам другой URL-адрес.

Например конфигурация маршрута, вероятно, что-то вроде этого:

routes.MapRoute(
    name: "Default", 
    url: "{controller}/{action}/{id}", 
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
); 

Изменение значения по умолчанию ни к чему-либо или удалить их:

routes.MapRoute(
    name: "Default", 
    url: "{controller}/{action}/{id}", 
    defaults: new { id = UrlParameter.Optional } 
); 

Обратите внимание, что делает это означает, что ваши страницы будут доступны только по полной линии controller/action, чтобы вы могли создать целевую страницу и сделать это по умолчанию.

Если вам абсолютно необходимо знать полный URL-адрес действия, вы можете сделать это таким образом. сначала создайте дополнительный маршрут и поместите его внизу конфигурации маршрута. Это никогда не будет использоваться системой по умолчанию:

routes.MapRoute(
    name: "AbsoluteRoute", 
    url: "{controller}/{action}/{id}", 
    defaults: new { id = UrlParameter.Optional } 
); 

Затем в коде вы можете назвать это (не уверен, что он доступен в бритве, но это должно быть легко написать вспомогательный метод):

var fullURL = UrlHelper.GenerateUrl("AbsoluteRoute", "Index", "Home", null, null, null, null, System.Web.Routing.RouteTable.Routes, Request.RequestContext, false); 
+0

Кажется разумным, но мне нужна домашняя страница как целевая страница. Разве это невозможно? –

+0

ОК, я обновлю, но ... это, наверное, плохая идея, особенно для SEO. – DavidG

+0

Это для сайта интрасети, поэтому SEO не вызывает беспокойства. –

1

Возможно, вам понадобится создать определенный маршрут для дома/индекса, который предшествует маршруту по умолчанию. Затем вы можете указать маршрут по умолчанию и точку маршрута Home/Index в одно и то же место. Тем не менее, это не перенаправляет вас на главную/индекс, если вы перейдете на базовый маршрут ... так что вам придется добавить перенаправление URL-адресов, либо на уровне IIS (есть настройки для этого), либо вы можете просто добавить код на страницу индекса, чтобы просмотреть URL-адрес и перенаправить на полный URL-адрес.

В качестве альтернативы вы можете удалить контроллер и значения по умолчанию, а затем добавить перенаправление URL-адресов в конфигурацию IIS, чтобы перенаправить вас на полный путь, если они перейдут в корень.

+0

Hmm интересный способ. Думаю, я понял это, используя чистый MVC, хотя все еще получает +1 от меня. – DavidG

Смежные вопросы