我有一个小的ASP.NET WebAPI应用程序,我设置的唯一路径如下:
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{*furtherpath}"
);
我有以下控制器:
public class FoldersController : ApiController {
public string GetThis(DateTime queryStringDate) {
return "abc";
}
public bool GetThat(string furtherpath) {
return "xyz";
}
}
当我尝试发出此请求时,我收到500内部服务器错误,因为它匹配这两个方法操作:
GET http://[server]/api/folders?queryStringDate=2015-02-11%2000:00:00
现在我认为这会明确地与GetThis
匹配,因为请求的网址末尾没有包含{controller}
和{*furtherpath}
以及{{1}的斜杠未标记为可选参数。为什么此请求对WebAPI不明确?如何告诉WebAPI furtherpath
之后缺少斜杠意味着此请求应与folders
匹配?
答案 0 :(得分:2)
我认为问题在于两种方法都匹配路线。 <form method='POST'>
<input type="hidden" name="_method" value="PUT" />
<!-- Other Fields -->
</form>
被视为furtherpath
方法根本不使用的参数。
在这里使用属性路由真的会受益匪浅。用它来注册您的路线:
GetThis
然后用路线装饰你的方法:
config.MapAttributeRoutes();
这样可以更精细地控制您的路线。
@ luca-ghersi提供的link也非常有用。
答案 1 :(得分:0)
如果你拿出&#34; Furtherpath&#34;从路由配置,路由将由您的变量名称引导。
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/");
GET http://[server]/api/folders?queryStringDate=2015-02-11%2000:00:00
GET http://[server]/api/folders?furtherpath=2015-02-11%2000:00:00