Я работаю над перемещением проекта API из необработанных обработчиков HTTP, где я использую периоды в путях:
http://server/collection/id.format
Я хотел бы следовать той же схеме URL-адресов в версии веб-Api (самостоятельно) и пробовал это:
var c = new HttpSelfHostConfiguration(b);
c.Routes.MapHttpRoute(
name: "DefaultApiRoute",
routeTemplate: "{controller}/{id}.{format}",
defaults: new { id = RouteParameter.Optional, format = RouteParameter.Optional },
constraints: null
);
К сожалению, это не похоже на разрешение (согласованное 404 on/foo,/foo/bar и /foo/bar.txt). Аналогичный шаблон с использованием косой черты перед "форматом" отлично работает:
var c = new HttpSelfHostConfiguration(b);
c.Routes.MapHttpRoute(
name: "DefaultApiRoute",
routeTemplate: "{controller}/{id}/{format}",
defaults: new { id = RouteParameter.Optional, format = RouteParameter.Optional },
constraints: null
);
Я еще не углубился в код для Web Api, и прежде чем я подумал, что попрошу здесь узнать, является ли это известным или, возможно, даже оправданным ограничением в Web Api.
ОБНОВЛЕНИЕ: Я забыл упомянуть, что "id" и "format" - это строки, которые, как оказалось, важны для решения этого вопроса. Добавление ограничения для исключения периодов из маркера "id" решает проблему 404.