1

AngularJS から始めて、文字列配列メンバーを持つ JSON オブジェクトを MVC WebApi GET メソッドに渡そうとしていますが、WebAPI コントローラーが正しい値を受け取ることができません。おそらく私は明らかな何かを見逃しています、誰かが解決策を提案できますか? JS では、私の呼び出しは次のようになります。

$http({
    url: "/api/test",
    method: "GET",
    params: {
      //...
        fields: ["one", "two"]
    }});

サーバー側では、対応するモデルは次のとおりです。

public sealed class MyModel
{
    //...
    public List<string> Fields { get; set; }
}

そして最後にコントローラーの署名:

public dynamic Get([FromUri] MyModel model)

モデルを調べると、Fields が 1 つの項目のみを含む配列であることがわかります。これは、配列ではなく["one","two"] (角括弧と引用符を含む) など、「生の」JSON 文字列です。 2つのアイテム1と2で。これを修正することは可能ですか?ありがとう!

4

2 に答える 2

0

「POST」を試して、MyModel フィールド/プロパティ ([f/F]ields) の大文字化を確認し、1 つの MyModel または MyModel の配列を渡しているかどうかを確認し、webApi メソッドの署名を更新します。

数日前、C# クラスを文字列として投稿したケースがありました。

// C# class
public class PeronSerachCriteria {
    public string surname, firstname, active;
    public int pageIndex, pageSize;
}

//C# web service method accepts post, passed in as a string
public Object[] Search(string criteria) {
    var ser = new System.Web.Script.Serialization.JavaScriptSerializer();
    var x = ser.Deserialize < PeronSerachCriteria > (criteria);
}


// Angular.js service method
this.search = function(peronSerachCriteria) {

    var d = $q.defer();

    var postData = {
        criteria: JSON.stringify(peronSerachCriteria),
    };

    $http({
        method: 'POST',
        url: apiurl + '/Search',
        data: postData,
        cache: true,
        headers: {'Content-Type': 'application/json'}
    }).success(function(data, status, headers, config) {
        d.resolve(data.d);
    }).error(function(data, status, headers, config) {
        d.reject(status);
    });
    return d.promise;
};
于 2013-07-22T06:14:30.413 に答える
0

配列型の「フィールド」として 1 つのフィールドを持つクライアント側 JavaScript モデル オブジェクトを作成し、フィールドを設定してみてください。

var myObj = {}
myObj.fields = [];
myObj.fields.push("one")
myObj.fields.push("Two") 

次にWebApiのgetメソッドにオブジェクトを渡します。

$http({
url: "/api/test",
method: "GET",
data: myObj});

私は思う、これはうまくいくはずです。

于 2013-07-22T05:44:02.430 に答える