Правильный рендеринг ActionLinks на сайте MVC с vanityURL

Мне нужно создать сайт, на котором шаблоны URL-адресов позволяют использовать персонализированный URL-адрес, например www.mysite.com, который открывает главный портал.

www.mysite.com/customer1 предоставляет портал, настроенный для этого клиента (те же действия и контроллеры, которые называются аргументом для настройки, будут извлечены из URL-адреса).

Я хочу, чтобы префикс «/customer1/» постоянно сохранялся в URL-адресе на всех страницах.

У меня есть следующие маршруты, которые отлично работают:

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

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

Однако, когда я захожу на сайт по vanityURL, поэтому на www.mysite.com/customer1 все ссылки действий отображаются нормально, как

<a href="/customer1/Home/Contact">Contact</a>

но когда я ввожу только www.mysite.com, все ссылки отображаются как:

<a href="//Home/Testimonials">Testimonials</a> 

и я не могу никуда ориентироваться.

Как я могу заставить их правильно отображаться без параметра companyurl и без дополнительного /?


person Anna    schedule 14.02.2017    source источник


Ответы (1)


Предполагая, что я правильно понял, попробуйте это (хотя проверьте, работает ли он так, как ожидалось):

  • удалите значение по умолчанию для {companyurl} — это сделает его «обязательным» для этого маршрута (это означает, что он не будет «соответствовать» вашей конфигурации маршрута CompanyUrl, если не присутствует, и не попадет в следующую конфигурацию, которая является конфигурацией Default).

Итак, ваш маршрут «CompanyUrl»:

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

Хт...

person EdSF    schedule 15.02.2017
comment
Спасибо что помогло. Я не знал, что значение по умолчанию делает его обязательным, у меня были некоторые другие проблемы, после которых они исчезли, когда я добавил ограничение на параметр companyurl. - person Anna; 16.02.2017