Períodos podem ser usados em Rotas Asp.net Web Api?
Estou trabalhando na mudança de um projeto de API de manipuladores HTTP brutos em que estou usando períodos nos caminhos:
http://server/collection/id.format
Gostaria de seguir o mesmo esquema de URL em uma versão da Web Api (auto-hospedado) e tentei isso:
var c = new HttpSelfHostConfiguration(b);
c.Routes.MapHttpRoute(
name: "DefaultApiRoute",
routeTemplate: "{controller}/{id}.{format}",
defaults: new { id = RouteParameter.Optional, format = RouteParameter.Optional },
constraints: null
);
Infelizmente, isso não parece resolver (404 / on / foo / foo / bar e /foo/bar.txt) consistentes. Um padrão similar usando uma barra antes de 'format' funciona bem:
var c = new HttpSelfHostConfiguration(b);
c.Routes.MapHttpRoute(
name: "DefaultApiRoute",
routeTemplate: "{controller}/{id}/{format}",
defaults: new { id = RouteParameter.Optional, format = RouteParameter.Optional },
constraints: null
);
Ainda não investiguei o código da Web Api e, antes de pensar, gostaria de perguntar aqui se essa é uma limitação conhecida ou talvez justificada no Web Api.
ATUALIZAÇÃO: deixei de mencionar que "id" e "format" são strings, o que acaba sendo importante para a solução dessa questão. Adicionar uma restrição para excluir períodos do token "id" resolve o problema 404.