Я хочу объединить два маршрута Get["/"]
и Get["/{value:int}"]
.
Как?
Get["/{value?:int}"]
и Get["/{value:int?}"]
возвращают ошибку 404.
Я хочу объединить два маршрута Get["/"]
и Get["/{value:int}"]
.
Как?
Get["/{value?:int}"]
и Get["/{value:int?}"]
возвращают ошибку 404.
Я обнаружил, что вы можете назначить один и тот же метод для нескольких определений GET (или любого HTTP-глагола):
Get["/"] = Get["/{value:int}"] = _ => { // method here }
Конечный результат тот же, хотя и не элегантный.
Я просмотрел исходный код Нэнси (2014/05/20), и он не похож на то, что он создан для обработки необязательных значений в ограничениях маршрута.
Следующий сегмент кода из класса CaptureNodeWithConstraint, по-видимому, выполняет сопоставление ограниченного сегмента. Он выполняет базовое разделение символа ':', чтобы разделить имя параметра и ограничение:
/// <summary>
/// Matches the segment for a requested route
/// </summary>
/// <param name="segment">Segment string</param>
/// <returns>A <see cref="SegmentMatch"/> instance representing the result of the match</returns>
public override SegmentMatch Match(string segment)
{
var routeSegmentConstraint = routeSegmentConstraints.FirstOrDefault(x => x.Matches(constraint));
if (routeSegmentConstraint == null)
{
return SegmentMatch.NoMatch;
}
return routeSegmentConstraint.GetMatch(this.constraint, segment, this.parameterName);
}
private void ExtractParameterName()
{
var segmentSplit = this.RouteDefinitionSegment.Trim('{', '}').Split(':');
this.parameterName = segmentSplit[0];
this.constraint = segmentSplit[1];
}
Затем это переходит к методам GetMatch(,,,) ограничений, в которых, насколько я вижу, нет ничего, что позволяло бы использовать необязательный параметр.
Я попытался создать ваш маршрут, используя различные формы маршрутов на основе регулярных выражений, например:
Get[@"/(?<value>[\d]{0,3})"] = parameters => "Hello World";
И жадное регулярное выражение:
Get[@"^(?<value>[\d]{0,3})$"] = parameters => "Hello World";
Но все это дало мне 404 для маршрута '/'.
Я предполагаю, что это невозможно сделать, используя стандартные определения маршрутизации. Возможно, вам придется выполнить базовый необязательный маршрут, например:
Get[@"/{value?}"] = parameters => "Hello World";
А затем добавьте проверку параметра «значение» в свой обработчик.