0

$http を使用してサービスから削除する整数の配列を ASP.Net Web API コントローラー メソッドに投稿しようとしています。私は両方を試しました

[HttpDelete]
public HttpResponseMessage DeleteMany(int[] ids) { }

[HttpDelete]
public HttpResponseMessage DeleteMany(DeleteManyDto dto) { }

public class DeleteManyDto
{
    public int[] Ids {get;set;}
}

パラメータをnullとして取得し続けます。Angular サービスでいくつかのバリエーションを試しました。ここに例があります

this.deleteMany = function(ids) {
// ids is an int array. e.g. [1,4,6]
    return $http.delete('api/Foo/DeleteMany', { toDelete: ids }).then(function(result) {
        return result.status;
    });
};

私が何を見逃しているか知っている人はいますか?

更新: スペルミス。HTTP リクエストからのデバッグが含まれています。

Request URL:http://localhost:54827/api/Foo/DeleteMany
Request Method:DELETE
Status Code:500 Internal Server Error
Request Headersview source
Accept:application/json, text/plain, */*
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8
Cache-Control:no-cache
Connection:keep-alive
Cookie:__RequestVerificationToken=blabla
Host:localhost:54827
Origin:http://localhost:54827
Pragma:no-cache
Referer:http://localhost:54827/
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.101 Safari/537.36
Response Headersview source

上記のコードは、リクエスト ペイロードを生成していません。更新を行うと、リクエストのペイロードが表示されます。例

Request Payloadview parsed
{"id":4,"name":"zzzz", "bar": 2}

それだけの価値があるため、私はAngular 1.2.rc3を使用しています

4

2 に答える 2

2

コントローラー メソッドのシグネチャを次のように変更してみてください。

[HttpDelete]
public HttpResponseMessage DeleteMany(int[] toDelete) { }

または、ビューモデルを使用している場合は、delete 呼び出しを次のように変更します。

return $http.delete('api/Foo/DeleteMany', { Ids: ids }).then(function(result) {
        return result.status;
    });

編集:

しかし、本当の問題は$http.delete呼び出しにあると思います。HTTP でDELETE動詞を使用して本文を送信することはできません。MVC はメッセージ本文または URL からデータをバインドするため、配列はバインドされません。POSTリクエストでDeleteManyを実装してみてください。

http://docs.angularjs.org/api/ng.$http#methods_delete

ドキュメントの delete メソッドの定義に data パラメータがないことがわかります。

または、データをメッセージ ヘッダーに追加するこのアプローチを試すこともできます。

DELETEリクエストでボディを送信するクリーンな方法は何ですか?

于 2013-11-04T08:21:26.173 に答える