请求的资源不支持http方法“Put”

时间:2013-03-07 17:32:46

标签: asp.net-mvc web-applications asp.net-web-api

我可以通过/ 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不受支持。

2 个答案:

答案 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)
    {
     ...
    }