WebAPI route 404's when there is a trailing space in the URL

asp.net, asp.net-mvc-routing, asp.net-web-api, c#, routes

Solution

Your issue has nothing to do with WebAPI itself but how Asp.Net handles some specific urls. And Asp.Net handles these urls in a very paranoid way, so you need to tell it to relax.

Add this line to your web.config under `system.web`:

<httpRuntime relaxedUrlToFileSystemMapping="true" />

You can read more about this topic:

- Putting the Con (COM1, LPT1, NUL, etc.) Back in your URLs

Also on SO:

- "The resource cannot be found." error when there is a "dot" at the end of the url

- Problem with a URL that ends with %20 (it describes a different context so I don't think that this is a real duplicate)

Problem

With the default web api route ``` config.Routes.MapHttpRoute( name: "API Default", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } ); ``` and a controller ``` public class TestController : ApiController { [HttpGet] public HttpResponseMessage Get(string id) { return Request.CreateResponse(HttpStatusCode.OK, id); } } ``` A request to `'api/test/1'` returns `1` If for some reason you send a request to `'api/test/1%20'` the route 404's. Now this example may seem silly since browsers trim trailing spaces, but for a route like `'api/{controller}/{id}/{extrastuff}'` the space in `'1 '` would convert to `'1%20'` and the request will 404 on the route not being found.

Original source

Related problems