当URL中有尾随空格时,WebAPI路由404

时间:2012-11-15 21:10:11

标签: c# asp.net routing asp.net-web-api asp.net-mvc-routing

使用默认的网络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。

2 个答案:

答案 0 :(得分:29)

您的问题与WebAPI本身无关,但Asp.Net如何处理某些特定网址。 并且Asp.Net以非常偏执的方式处理这些网址,因此您需要告诉它to relax

将此行添加到system.web下的web.config:

<httpRuntime relaxedUrlToFileSystemMapping="true" />

您可以阅读有关此主题的更多信息:

同样在SO:

答案 1 :(得分:1)

将此添加到处理程序

      <add name="ExtensionlessUrlHandler-Integrated-4.0-ForApi"
     path="api/*"
     verb="*"
     type="System.Web.Handlers.TransferRequestHandler"
     preCondition="integratedMode,runtimeVersionv4.0" />
    </handlers>
  </system.webServer>