Вот как я это делаю прямо сейчас:
// Snippet 1
var indexUrl = Url.Action("Index", new {id = " "}).Replace("%20", string.Empty);
Поскольку вы можете сделать вывод из приведенного выше кода, у меня есть контроллер, давайте назовем его Home, с методом индекса, который имеет необязательный идентификатор .
Этот код:
// Snippet 2
var indexUrl = Url.Action("Index", new {id = 123 });
производит "/ home / 123", чего я и ожидаю. Однако этот код:
// Snippet 3
var indexUrl = Url.Action("Index");
не просто возвращает "/ home", как я бы подумал. Вместо этого я получаю один из этих двух результатов:
1) Если я уже нахожусь на странице "/ home / 123", код из фрагмента 3 будет по-прежнему возвращать "home / 123", потому что из того, что я прочитал Action .Url выберет «id» из контекста запроса.
2) Если я нахожусь на другой странице, я даже не получаю «/ home», но пустое значение.
Как Вы можете видеть в коде из фрагмента 1, мое временное исправление состоит в том, что я добавляю пробел в параметре id, а затем удаляю его методом замены перед использованием URL, что довольно уродливо.
Ответы Я уже рассмотрел обзор, который, кажется, подразумевает, что это все задумано, но это ответы 2012 года, поэтому я надеюсь, что новые / лучшие способы, чем описанные выше, сделали это. Net Core? Все, что мне нужно, это возможность сообщить Url.Action, что я хочу, чтобы id был нулевым, чтобы он мог просто возвращать базовый путь без необязательного параметра, в данном случае "/ home"