1

我可以通过 /api/set/id 或 /api/set/archived/ GET 很好,但 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)
        {
         ...
        }

在提琴手中,我将来自相应 GET 请求的原始对象放入:

http://localhost:24144/api/set/update

但我明白了

"{"$id":"1","Message":"请求的资源不支持http方法'PUT'。"}"

为什么 PUT 不起作用?

编辑:我还尝试更新第一个路由以将 id 作为可选,并删除 PUT 方法上的操作名称。然后我尝试通过 PUT /api/set 访问,我得到相同的 405 错误 - PUT 不受支持。

4

2 回答 2

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)
    {
     ...
    }
于 2013-03-07T19:18:41.410 回答
1

也许动词没有在 web.config 中正确注册?

    <authorization>
        <!-- General application authorization -->
        <allow verbs="GET" users="*"/>
        <allow verbs="PUT" users="*"/>
        <allow verbs="POST" users="*"/>
    </authorization>
于 2013-03-07T17:37:12.417 回答