我正在从原始 http 处理程序中移动一个 API 项目,我在路径中使用句点:
http://server/collection/id.format
我想在 Web Api(自托管)版本中遵循相同的 URL 架构,并尝试了这个:
var c = new HttpSelfHostConfiguration(b);
c.Routes.MapHttpRoute(
name: "DefaultApiRoute",
routeTemplate: "{controller}/{id}.{format}",
defaults: new { id = RouteParameter.Optional, format = RouteParameter.Optional },
constraints: null
);
不幸的是,这似乎没有解决(/foo、/foo/bar 和 /foo/bar.txt 上的一致 404)。在“格式”之前使用斜线的类似模式可以正常工作:
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 问题。