ASP.NET MVC Url.Action добавляет текущие значения маршрута к сгенерированному URL-адресу

Я встречал этот вопрос несколько раз здесь, в SO, но ни один из них не дал приемлемого ответа:

ASP.NET MVC @ Url.Action включает текущие данные маршрута
ASP.NET MVC неявно добавляет значения маршрута

В основном у меня есть контроллер с методом действия под названием Group, у него есть перегрузка, которая не получает параметров и отображает список элементов, а еще один, который получает идентификатор и отображает подробности для эта группа.

Если я сделаю что-то вроде этого:

Url.Action("Group", "Groups");

С главной страницы сайта (/) он вернет URL-адрес, подобный этому:

"mysite.com/Groups/Group"

, что нормально Теперь, если текущий адрес сайта / Группы / Группа / 1 И я вызываю тот же метод

Url.Action("Group", "Groups");

, возвращаемый URL-адрес выглядит следующим образом:

"mysite.com/Groups/Group/1"

Он автоматически добавляет значение маршрута для текущей страницы при генерации URL-адреса. Даже если я сгенерирую URL-адрес следующим образом:

Url.Action("Group", "Groups", null);

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

Url.Action("Group", "Groups", new {id=""});

Это сгенерирует следующий URL:

"mysite.com/Groups/Group"

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

53
задан Community 23 May 2017 в 01:55
поделиться