使用默认的网络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'
现在这个例子看起来很愚蠢,因为浏览器会修剪尾随空格,但是
表示'api/{controller}/{id}/{extrastuff}'
'1 '
中的空格会转换为'1%20'
,请求将在未找到的路线上显示404。
答案 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>