当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出现问题 (它描述了不同的上下文,因此我认为这不是真正的重复)

将此添加到处理程序