方法

6

をWEBAPIする整数の配列を渡す私はint型の配列を渡すしようとしていますが、私はWEBAPI方法方法

var postData = { "deletedIds": deletedIds }; 

    $.ajax({ 
     type: "DELETE", 
     traditional: true, 
     dataType: 'json', 
     contentType: 'application/json', 
     cache: false, 
     url: "/api/Management/Models", 
     data: JSON.stringify(postData), 
     success: ModelDeleted, 
     error: ModelNotDeleted 
    }); 

とapiController内の値を取得することはできません。

[HttpDelete] 
     public bool DeleteModel(int[] deletedIds) 
     { 
      return modelsRepository.DeleteModels(deletedIds); 
     } 
+0

私はJSON.stringifyを削除しようとしたが、それでも私は新しい配列を使用しようとしましたが、それでもWEBAPIメソッドのパラメータにnullを取得 –

答えて

8

あなたのコードかわいい"deletedIds"オブジェクトの構造を定義してください。 1つの提案は、 新しいArray() オブジェクトを使用してdeletedIdsプロパティを初期化し、JSON.stringify()を削除することです。 同様の質問がありましたhere

EDIT

のWeb APIは、さまざまな方法でコンテンツデータを解析サポートしていますが、複数に対処していないコンテンツ値を掲載。問題の解決策は、int []型のプロパティを持つViewModelを作成することです。 下記のようなコード

public class SimpleViewModel 
{ 
    public int[] deletedIds{ get; set; } 
} 

//Controller 
[HttpDelete] 
    public bool DeleteModel(SimpleViewModel deletedIds) 
    { 
     return modelsRepository.DeleteModels(deletedIds.deletedIds); 
    } 

をパラメータタイプとして使用してください。

+0

を動作していません –

+0

返信ありがとうございますが、あなたが参照した質問は、通常のコントローラでアクションメソッドを使用しているときに問題なく動作していますが、webapiにURLを送信するとデータを取得できません。 –

+0

ポストデータをテストするのにfirebugを使用してください。 – Shashank

0

stringifyビットがあなたのオブジェクトを台無しにしているのではないかと思いますが、それを変数に代入して、それが予想されるフォーマットかどうかを確認しようとしましたか?

あなたは今のところ全部文字列化している:ベース、最後に

{ "deletedIds": JSON.stringify(deletedIds) }

+0

どちらの方法でも、コントローラメソッドが整数を期待する場合、JSで文字列化するのはなぜですか? –

+0

stringifyは単なる試みでした。私は通常のコントローラでテストアクションメソッドを作りました。それはMVBモデルバインダの作品ですが、webapiでは動作しません!! –

+1

@MuhammadAlaa - リクエストとともに送信している正確なJSONを投稿してください。コントローラメソッドはまったくヒットしましたか?空の配列を取得していますか? –

2

:あなたはおそらく、記事の本文として送信したいことはこれですながら

{ "deletedIds": deletedIds }

を@Shashankでそれが働いたとコードが変更されました:

var deletedIds = new Array(); 

deletedIds.push(modelId); 

var postData = { "DeletedIds": deletedIds }; 
$.ajax({ 
    type: "Delete", 
    traditional: true, 
    dataType: 'json', 
    cache: false, 
    url: "/api/Management/Models", 
    data: postData, 
    success: ModelDeleted, 
    error: ModelNotDeleted 
}); 

とapiController:

[HttpDelete] 
     public bool DeleteModels(DeleteViewModel dvm) 
     { 
      return modelsRepository.DeleteModels(dvm.DeletedIds); 
     } 

とDeleteViewModel用:

public class DeleteViewModel 
    { 
     public int[] DeletedIds { get; set; } 
    }