12

私は次のようなビューモデルを持っています。

public class StoreItemViewModel
{
    public Guid ItemId { get; set; }
    public List<Guid> StoreIds { get; set; }
    [Required]
    public string Description { get; set; }
    //[Required]
    //[DataMember(IsRequired = true)]
    public int ItemTypeId { get; set; }


}

RestSharp を使用している小さなヘルパーがあります。

public static IRestResponse Create<T>(object objectToUpdate, string apiEndPoint) where T : new()
    {
        var client = new RestClient(CreateBaseUrl(null))
        {
            Authenticator = new HttpBasicAuthenticator("user", "Password1")
        };

        var request = new RestRequest(apiEndPoint, Method.POST);
        //request.JsonSerializer = new JsonSerializer();
       // {RequestFormat = DataFormat.Json};
        request.AddObject(objectToUpdate);
       // clientJsonSerializer = new YourCustomSerializer();
        var response = client.Execute<T>(request);
        return response;
    }

私のAPI内でコントローラーをデバッグするとき

 [HttpPost]
    public HttpResponseMessage Create([FromBody]StoreItemViewModel myProduct)
    {
        //check fields are valid
     .........
     }

myProducts 製品はすべて、空の Guid を持つ 1 つの報酬を常に返す public List StoreIds とは別に取り込まれます。2 つ以上の StoreId を追加した場合でも

これは、アプリケーション内の Create ヘルパーに問題があるためだと思います。

誰でもこれを手伝ってもらえますか。これは大きな頭痛の種です。

webapiに送信される生データは次のようになります

ItemId=f6dbd244-e840-47e1-9d09-53cc64cd87e6&ItemTypeId=6&Description=blabla&StoreIds=d0f36ef4-28be-4d16-a2e8-37030004174a&StoreIds=f6dbd244-e840-47e1-9d09-53cc64cd87e6&StoreId=d0f36ef4-28be-4d16-a2e8-37030004174a
4

3 に答える 3

23

RestSharp には、Json シリアル化を使用して RestRequest 本体にオブジェクトを追加するためのより合理的な方法があります。

public static IRestResponse Create<T>(object objectToUpdate, string apiEndPoint) where T : new()
{
    var client = new RestClient(CreateBaseUrl(null))
    {
        Authenticator = new HttpBasicAuthenticator("user", "Password1")
    };
    var request = new RestRequest(apiEndPoint, Method.POST);
    request.AddJsonBody(objectToUpdate); // HERE
    var response = client.Execute<T>(request);
    return response;
}

これは RestSharp 105.0.1.0 で見つかりました

于 2015-02-20T16:08:14.833 に答える
19

私はこれを機能させることができました。正しい方法ではないと思いますが、うまくいきます。

 public static IRestResponse Create<T>(object objectToUpdate, string apiEndPoint) where T : new()
    {
        var client = new RestClient(CreateBaseUrl(null))
        {
            Authenticator = new HttpBasicAuthenticator("user", "Password1")
        };
        var json = JsonConvert.SerializeObject(objectToUpdate);
        var request = new RestRequest(apiEndPoint, Method.POST);
        request.AddParameter("text/json", json, ParameterType.RequestBody);
        var response = client.Execute<T>(request);
        return response;
    }
于 2012-09-05T19:33:42.400 に答える
14

私は同じ問題に苦労し、実用的な解決策を思いつきました。

  1. リクエスト形式を必ず JSON に設定してください。

    request.RequestFormat = DataFormat.Json;

  2. AddObject ではなく AddBody を使用します。

    request.AddBody(zNewSessionUsage);

したがって、コードは次のようになります。

public static IRestResponse Create<T>(object objectToUpdate, string apiEndPoint) where T : new()
{
    var client = new RestClient(CreateBaseUrl(null))
    {
        Authenticator = new HttpBasicAuthenticator("user", "Password1")
    };

    var request = new RestRequest(apiEndPoint, Method.POST);
    request.RequestFormat = DataFormat.Json;
    request.AddBody(objectToUpdate);
    var response = client.Execute<T>(request);
    return response;
}
于 2014-08-11T20:03:38.960 に答える