Я уже некоторое время пытаюсь выяснить, почему этот UriTemplate не работает как часть службы WCF и, похоже, никуда не денется:
[WebGet(UriTemplate="api/1.0/version")]
string GetVersion();
Быстрый тест показывает, что UrlTemplateTable отлично ему соответствует (вывод «api / 1.0 / version»):
static void Main(string[] args)
{
Uri prefix = new Uri("http://localhost/");
System.UriTemplateTable table = new System.UriTemplateTable(prefix);
table.KeyValuePairs.Add(new KeyValuePair<UriTemplate, Object>(new UriTemplate("api/1.0/version"), "a"));
table.KeyValuePairs.Add(new KeyValuePair<UriTemplate, Object>(new UriTemplate("api/2.0/version"), "b"));
table.KeyValuePairs.Add(new KeyValuePair<UriTemplate, Object>(new UriTemplate("api/version"), "c"));
Uri uri = new Uri("http://localhost/api/1.0/version");
UriTemplateMatch match = table.MatchSingle(uri);
Console.WriteLine("{0}", match.Template.ToString());
}
Точка не является недопустимым символом в URL-адресах, RequestPathInvalidCharacters не исключает его, отсутствуют правила перезаписи, которые могли бы помешать. Ничего не могу найти в документации к нему.
Хотя существует очевидный обходной путь, не использующий точку в шаблоне, мне любопытно, почему он не работает с «HTTP 404 / ресурс не найден».