当URL中有尾随空格时,WebAPI路由404
使用默认的Web api路由
config.Routes.MapHttpRoute( name: "API Default", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } );
和控制器
public class TestController : ApiController { [HttpGet] public HttpResponseMessage Get(string id) { return Request.CreateResponse(HttpStatusCode.OK, id); } }
请求'api/test/1'
返回1
如果由于某种原因你向'api/test/1%20'
发送请求
路线404的。
现在这个例子看起来很愚蠢,因为浏览器会修剪尾随空格,但是
对于'api/{controller}/{id}/{extrastuff}'
这样的路线
'1 '
的空格将转换为'1%20'
并且在未找到的路线上请求将为404。
您的问题与WebAPI本身无关,但Asp.Net如何处理某些特定url。 Asp.Net以非常偏执的方式处理这些url,因此您需要告诉它放松 。
将此行添加到system.web
下的web.config:
您可以阅读有关此主题的更多信息:
- 将Con(COM1,LPT1,NUL等)放回您的URL
也在SO上:
- “没有找到您要查的资源。” 在url末尾有“点”时出错
- 以%20结尾的URL出现问题 (它描述了不同的上下文,因此我认为这不是真正的重复)
将此添加到处理程序