我已经尝试了一段时间来弄清楚为什么这个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 /无法找到资源'。
答案 0 :(得分:3)
之前我遇到过同样的问题。我意识到这是IIS的限制,与WCF无关。当IIS最初拦截时,请求假定后面的值。表示扩展,因此它尝试查找该扩展的托管处理程序。由于它没有找到任何,它只会抛出404。
此致 巴勃罗。