9

オブジェクトの配列をコントローラーのメソッドに渡そうとしている.netmvc4webapiプロジェクトがあります。

SOで、オブジェクトのプロパティをparam1 = whatever&param2 = bling&param3=blahで設定する必要があることについて説明している例をいくつか見つけました。

しかし、それを使用してコレクションを渡す方法がわかりません。

これが私のメソッドシグネチャです。引数を[FromUri]属性で装飾していることに注意してください。

public List<PhoneResult> GetPhoneNumbersByNumbers([FromUri] PhoneRequest[] id)
{
    List<PhoneResult> prs = new List<PhoneResult>();
    foreach (PhoneRequest pr in id)
    {
        prs.Add(PhoneNumberBL.GetSinglePhoneResult(pr.PhoneNumber, pr.RfiDate, pr.FinDate, pr.State));
    }
    return prs;
}

これが私の単純なPhoneRequestオブジェクトです:

public class PhoneRequest
{
    public string PhoneNumber { get; set; }
    public string RfiDate { get; set; }
    public string FinDate { get; set; }
    public string State { get; set; }
}

これが私が渡すために使用しているもののサンプルです:

http://localhost:3610/api/phonenumber/getphonenumbersbynumbers/
   [{"PhoneNumber":"8016667777","RfiDate":"","FinDate":"2012-02-11","State":"UT"},
    {"PhoneNumber":"8018889999","RfiDate":"2012-12-01","FinDate":"","State":"UT"}]

これを使用すると、「悪いリクエスト」が返されます

私もこれを試しました

http://localhost:3610/api/phonenumber/getphonenumbersbynumbers?
    id=[{"PhoneNumber":"8016667777","RfiDate":"","FinDate":"2012-02-11","State":"UT"},
        {"PhoneNumber":"8018889999","RfiDate":"2012-12-01","FinDate":"","State":"UT"}]

これはメソッドに到達しますが、配列はnullです。

PhoneRequestオブジェクトの配列をWebAPIメソッドに渡すにはどうすればよいですか?

4

3 に答える 3

10

次の形式でURIからPhoneRequest[]を渡してみてください。

http://localhost:3610/api/phonenumber/getphonenumbersbynumbers?
    id[0][PhoneNumber]=8016667777&id[0][FinDate]=2012-02-11&id[0][State]=UT&
    id[1][PhoneNumber]=8018889999&id[1][RfiDate]=2012-12-01&id[1][State]=UT
于 2012-12-19T23:50:53.780 に答える
7

これにはPOSTを使用することをお勧めします。

クエリ文字列が大きくなると、ブラウザに依存するURLの最大長で問題が発生します。

渡すパラメータがたくさんある場合は、実際にデータを取得しているだけの場合でも、POSTは完全に受け入れられます。ただし、失われるのは、ユーザーがクエリ文字列を使用して特定のページをブックマークできることです。

于 2012-12-20T05:13:04.900 に答える
0

カスタムモデルバインダーであるFieldValueModelBinderクラスを作成しました。これは、JSONおよびXML構造を埋め込まずに、ネストされた配列または汎用リストタイプのデータを含むオブジェクトとフィールド名のペアを持つクエリ文字列を効果的に渡すことができます。モデルバインダーは、上記のすべての問題を解決できます。この質問は質問ID19302078によって拡張されたため、そのスレッドで私の回答の詳細を確認できます。

于 2013-12-26T21:17:29.373 に答える