Czy można używać okresów w Asp.Net Web Api Routes?
Pracuję nad przeniesieniem projektu API z surowych procedur obsługi HTTP, w których używam okresów w ścieżkach:
http://server/collection/id.format
Chciałbym śledzić ten sam schemat URL w wersji Web Api (self-hosted) i wypróbowałem to:
var c = new HttpSelfHostConfiguration(b);
c.Routes.MapHttpRoute(
name: "DefaultApiRoute",
routeTemplate: "{controller}/{id}.{format}",
defaults: new { id = RouteParameter.Optional, format = RouteParameter.Optional },
constraints: null
);
Niestety, wydaje się, że to nie rozwiązuje (spójne 404 na / foo, / foo / bar i /foo/bar.txt). Podobny wzór za pomocą ukośnika przed „formatem” działa dobrze:
var c = new HttpSelfHostConfiguration(b);
c.Routes.MapHttpRoute(
name: "DefaultApiRoute",
routeTemplate: "{controller}/{id}/{format}",
defaults: new { id = RouteParameter.Optional, format = RouteParameter.Optional },
constraints: null
);
Jeszcze nie zagłębiłem się w kod Web Api i zanim zacznę myśleć, zapytam tutaj, czy jest to znane, a może nawet uzasadnione ograniczenie w Web Api.
AKTUALIZACJA: Nie wspomniałem, że „id” i „format” są ciągami znaków, co okazuje się ważne dla rozwiązania tego pytania. Dodanie ograniczenia wykluczającego okresy z tokenu „id” rozwiązuje problem 404.