0

WebAPI プロジェクトで GET、PUT、POST を使用しています。私が行っている HTTP リクエストの最後の 1 つは DELeTE ですが、機能しません。

ここや他のウェブサイトの多くの投稿を読みましたが、どれもありません。例えば

DELETE コマンドで WebAPI コントローラにアクセスできない

WebAPI 削除が機能しない - 405 メソッドは許可されていません

ASP.Net WebAPI削除動詞が機能しない

ASP.NET Web API - PUT および DELETE 動詞は許可されていません - IIS 8

http://social.msdn.microsoft.com/Forums/en-US/windowsazuredevelopment/thread/8906fd7e-a60b-484e-be63-9574b9fca44a/

等...

回避策はありますか?

助けてください、ありがとう。

アップデート:

私のバックエンドコード:

         [HttpDelete]
    public HttpResponseMessage Delete(int divisionID)
    {
        if (divisionID != default(int))
        {
            var found = dc.MedicareLocalAccounts.SingleOrDefault(m => m.DivisionID == divisionID);

            if (found == null)
            {
                return new HttpResponseMessage(HttpStatusCode.NotFound);
            }

            dc.MedicareLocalAccounts.Remove(found);

            dc.SaveChanges();

            return new HttpResponseMessage(HttpStatusCode.OK);
        }

        return new HttpResponseMessage(HttpStatusCode.NotFound);
    }

ここで、パラメーターの型を int から任意のクラスに変更すると、Division としましょう

Delete(Division d)
{
     int divisionID = d.DivisionID;
     //....the rest is same
}

このようにして、それは機能します。

しかし、オブジェクト全体をパラメーターとして入力して DELETE メソッドを機能させる必要はありません。

それで、他にもっと良い解決策はありますか?

4

2 に答える 2

3

Web API は、単純なパラメーターの型 (int) を複雑な型 (クラス) とは異なる方法で処理します。デフォルトでは、単純なパラメーターは要求 URI から取得され、複合型は要求本文から取得されます。

最初の例では、パラメーター名は「divisionID」です。これはルート変数と一致しますか? デフォルトの Web API ルートは「api/{controller}/{id}」であるため、パラメーターの名前は「id」にする必要があります。

于 2013-05-17T15:12:34.430 に答える
0

回避策は、AttributeRouting ライブラリを使用することです。これは WebAPI の拡張機能であり、nuget からダウンロードできます。AttributeRouting ライブラリを使用すると、たとえば、削除を実行する HttpGet を使用して関数を実装できます。

[GET("delete/{id}"]
function DeleteThis(int id)
{
...
}
于 2013-05-17T05:52:20.907 に答える