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リクエストから生のオブジェクトを次のようにPUTしています。

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

しかし、私は得る

"{" $ id ":" 1 "、" Message ":"要求されたリソースはhttpメソッド'PUT'をサポートしていません。"}"

PUTが機能しないのはなぜですか?

編集:私はまた、その最初のルートをオプションとしてIDを持つように更新しようとし、PUTメソッドのアクション名を削除しました。次に、PUT / api / setを介してアクセスしようとしましたが、同じ405エラーが発生します-PUTはサポートされていません。

4

2 に答える 2

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 に答える
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 に答える