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.
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 1
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:
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)
Method 2
Add this to handlers
<add name="ExtensionlessUrlHandler-Integrated-4.0-ForApi"
path="api/*"
verb="*"
type="System.Web.Handlers.TransferRequestHandler"
preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>
</system.webServer>
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0