我可以通过/ api / set / id或/ api / set / archived /获得很好的效果,但是PUT无效。我的路线:
routes.MapHttpRoute(
name: "SetId",
routeTemplate: "api/set/{id}",
defaults: new { controller = "Set", action = "getset" }
);
routes.MapHttpRoute(
name: "Set",
routeTemplate: "api/set/{action}/{id}",
defaults: new { controller = "Set", id = RouteParameter.Optional }
);
设置控制器:
[HttpPut]
[AcceptVerbs("PUT")]
[ActionName("update")]
public HttpResponseMessage PutSet(Set set)
{
...
}
在fiddler中,我将原始对象从相应的GET请求中提取到:
http://localhost:24144/api/set/update
但是我得到了
“{”$ id“:”1“,”消息“:”请求的资源不支持http 方法'PUT'。“}”
为什么PUT不工作?
编辑:我也尝试更新第一个路由以将id作为可选项,并删除了PUT方法上的操作名称。然后我尝试通过PUT / api / set访问,我得到相同的405错误 - PUT不受支持。
答案 0 :(得分:1)
也许这些动词没有在web.config中正确注册?
<authorization>
<!-- General application authorization -->
<allow verbs="GET" users="*"/>
<allow verbs="PUT" users="*"/>
<allow verbs="POST" users="*"/>
</authorization>
答案 1 :(得分:1)
将此路线移至路线配置文件的顶部:
routes.MapHttpRoute(
name: "Set",
routeTemplate: "api/set/{action}/{id}",
defaults: new { controller = "Set", id = RouteParameter.Optional }
);
并将您的Put方法重命名为Update
[HttpPut]
public HttpResponseMessage Update(Set set)
{
...
}