Url.Action создает строку запроса, есть ли способ создать полный URL?

#asp.net-mvc #razor

#asp.net-mvc #бритва

Вопрос:

В настоящее время в моем проекте я использую @Url.Action для создания ссылок в атрибуте href тегов привязки.

например:

 <a href='@Url.Action("Index", "Home", new { id = 10 })' id="btn">Click</a>
  

И это работает нормально, каким бы ни был созданный URL…

 /home/index?id=10
  

есть ли способ вернуть URL-адрес

 /home/index/10
  

для SEO и эстетических целей? Я использовал идентификатор и номер в качестве заполнителя — в реальном приложении он может и будет использовать вместо этого строку (so…

 <a href='@Url.Action("Index", "Home", new { name="test" })' id="btn">Click</a>
  

чтобы вернуть URL-адрес

 /home/index/test
  

Комментарии:

1. Url.Action будет ли использоваться ваша таблица маршрутизации, правильно ли она настроена, чтобы разрешить это?

2. @DavidG Это разрешено, так как я могу использовать полный URL. Однако оба ведут на одну и ту же страницу. /home/index/test работает — но так же /home/index?name=test

Ответ №1:

Вам необходимо убедиться, что маршрутизация правильная. Убедитесь, что у вас есть такой маршрут:

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

Для вашего «реального приложения», поскольку вы используете вызываемый параметр name , вам понадобится такой, который выглядит следующим образом:

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