Дополнительные параметры реализуются через переписывание call-сайта . Поскольку контроллер будет вызываться с использованием полного списка параметров механизмом MVC, необязательный параметр просто не имеет значения.
Например, с учетом следующей функции:
public void Foo(int bar = 1, int baz = 2)
{
}
Называя это так:
Foo();
Заставляет компилятор интерпретировать его как:
Foo(1, 2);
Не происходит никакого волшебства, при котором вызов остается как Foo()
, и тогда сам метод подчиняется параметрам во время выполнения. Параметры добавляются во время компиляции, и больше ничего не нужно делать.
Обновление : чтобы указать MVC, что данный параметр маршрута является необязательным, вы можете установить его на UrlParameter.Optional
при определении маршрута. В этот момент должно появиться значение параметра по умолчанию для метода действия.