Корректировка URL-адреса, отображаемого в адресной строке с маршрутизацией

#asp.net-mvc #asp.net-mvc-routing

#asp.net-mvc #asp.net-mvc-routing

Вопрос:

Я хотел бы оптимизировать мой URL-адрес, отображаемый в веб-браузерах. Я знаю, что маршрутизация идеально подходит для этого, но я не знаю, возможно ли это так, как я хочу. У меня есть список проектов в виде списка. У каждого проекта есть идентификатор, имя и категория. При переходе на страницу с подробной информацией о продукте отображаемый URL-адрес должен быть «/ category / name». Я знаю, что могу передать идентификатор, категорию и имя в ActionLink и настроить маршрутизацию в Global.asax. Я уже делаю это, но у меня все еще есть идентификатор, который объединяется с остальной частью URL-адреса. Это некрасиво.

Вот пример:

Ссылка на действие, на мой взгляд:

 @Html.ActionLink(@p.Name, "Detail", new { projectID = @p.ProjectID, category = @p.Category, name = @p.Name })
  

глобальный.asax:

 routes.MapRoute(null,
    "{category}/{name}",       
    new { controller = "Project", action = "Detail" }
);
  

Результирующий URL:

введите описание изображения здесь

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

Спасибо.

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

1. Если категории и имени достаточно, зачем вам передавать ProjectID в вашей ActionLink?

2. @counsellorben: категорию и название интересно отобразить в URL-адресе в адресной строке. ProjectID необходим в контроллере действий, чтобы получить правильный проект для передачи в подробное представление.

3. Тогда вы должны принять ответ Руана, поскольку он предоставит чистый URL.

Ответ №1:

 routes.MapRoute(null,
"{category}/{name}/{projectID}",       
new { controller = "Project", action = "Detail", projectID = UrlParameter.Optional }
  

);

даст вам

/ ПРОМЫШЛЕННОСТЬ / Рассылка/16

это то, чего вы хотите?

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

1. Нет, в представлении я хотел бы создать ActionLink с несколькими параметрами (ProjectID, name, category). ProjectID используется в контроллере действий для получения правильного проекта. Далее, в URL я не хочу видеть идентификатор проекта. Я думаю, что это невозможно.