0

Web API (MVC4 プロジェクト内で作成) から POST メソッドを呼び出そうとしていますが、アクセスできません。

私のWeb API構成は次のとおりです。

        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{action}/{id}",
            defaults: new {action=RouteParameter.Optional, id = RouteParameter.Optional }
        );

次のメソッドを呼び出そうとしていますが、

    [HttpPost]
    public bool Delete(Int64 Id)
    {           
        return true;
    }

すべての GET メソッドが呼び出されています。

アクセスしようとすると、ブラウザが表示されますが、

「http 405 メソッドは許可されていません」

Response を見ると、次のように表示されます。

{"メッセージ":"要求されたリソースは、http メソッド 'GET' をサポートしていません。"}

私を助けてください。

4

1 に答える 1

4

アクセスしようとすると、ブラウザが表示されます

まあ、それは正常です。ブラウザは GET リクエストを送信します。メソッドは POST リクエストでのみ呼び出すことができます。

サンプルの HTTP リクエストは次のようになります。

POST /someresource/delete/123 HTTP/1.1
Host: www.example.com
Content-Type: application/json
Content-Length: 0
Connection: close

Fiddler で要求を試すか、POST 要求を送信するサンプル HTTP クライアントを作成できます。

ああ、ちなみに、標準の RESTful 規則に固執しない理由は次のとおりです。

config.Routes.MapHttpRoute(
    name: "DefaultApi",
    routeTemplate: "api/{controller}/{id}",
    defaults: new { id = RouteParameter.Optional }
);

そしてあなたの行動:

public bool Delete(Int64 Id)
{           
    return true;
}

そしてそれを呼び出すには:

DELETE /someresource/123 HTTP/1.1
Host: www.example.com
Content-Type: application/json
Content-Length: 0
Connection: close

標準の RESTful 規則では、ルートでアクション名を使用しないように規定されていることに注意してください。どのアクションを呼び出すかを決定するのは HTTP 動詞です。したがって、アクションには HTTP 動詞に応じた名前を付ける必要があります。あなたの例では、指定された id を持つリソースを削除したいので、コントローラーアクションは (現在のように) Delete という名前にする必要があり、DELETE HTTP 動詞を介してアクセスできる必要があります。

于 2013-10-23T13:29:49.933 に答える