【问题标题】:How to attach json-formatted payload into RestSharp request?如何将 json 格式的有效负载附加到 RestSharp 请求中?
【发布时间】:2013-05-01 01:40:11
【问题描述】:

我无法通过 RestSharp 将工作负载放入请求中。谁能帮帮我?

我测试过

request.AddBody(payload) -> payload 是 json 中的序列化对象

但是,对我不起作用:

public override string Post(string url, object payload) { 
    RestRequest request = new RestRequest(url, Method.POST); 
    request.RequestFormat = DataFormat.Json;
    request.AddBody(payload); 
    IRestResponse response = Client.Execute(request); 
    return response.Content; 
} 

方法的返回是空字符串:/:/

【问题讨论】:

  • public override string Post(string url, object payload) { RestRequest request = new RestRequest(url, Method.POST); request.RequestFormat = DataFormat.Json; request.AddBody(有效载荷); IRestResponse 响应 = Client.Execute(request);返回响应。内容; } 方法的返回是空字符串 :/ :/

标签: c# request oauth-2.0 restsharp payload


【解决方案1】:

我有一个我使用的辅助方法:

    private IRestRequest CreateRequest(Uri uri, Method method, object body)
    {
        IRestRequest request = new RestRequest(uri, method);
        request.Resource = uri.ToString();
        request.Timeout = _timeout;

        if (body != null)
        {
            request.AddHeader("Content-Type", "application/json");
            request.RequestFormat = DataFormat.Json;
            request.JsonSerializer = new CustomConverter {ContentType = "application/json"};
            request.AddBody(body);
        }

        return request;
    }

转换器看起来像这样:

class CustomConverter : ISerializer, IDeserializer
{
    private static readonly JsonSerializerSettings SerializerSettings;

    static CustomConverter ()
    {
        SerializerSettings = new JsonSerializerSettings
        {
            DateTimeZoneHandling = DateTimeZoneHandling.Utc,
            Converters = new List<JsonConverter> { new IsoDateTimeConverter() },
            NullValueHandling = NullValueHandling.Ignore
        };
    }

    public string Serialize(object obj)
    {
        return JsonConvert.SerializeObject(obj, Formatting.None, SerializerSettings);
    }

    public T Deserialize<T>(IRestResponse response)
    {
        var type = typeof(T);

        return (T)JsonConvert.DeserializeObject(response.Content, type, SerializerSettings);
    }

    string IDeserializer.RootElement { get; set; }
    string IDeserializer.Namespace { get; set; }
    string IDeserializer.DateFormat { get; set; }
    string ISerializer.RootElement { get; set; }
    string ISerializer.Namespace { get; set; }
    string ISerializer.DateFormat { get; set; }
    public string ContentType { get; set; }
}

然后我可以在返回的请求上调用 Execute。我想知道序列化是否需要由 RestSharp 框架完成(通过设置要使用的序列化器)。

【讨论】:

    【解决方案2】:

    Restsharp 版本105.0 增加了一个新方法IRestRequest.AddJsonBody,所以现在你只需要调用AddJsonBody() 剩下的就交给你了:

    request.AddJsonBody(new MyParam
    {
       IntData = 1,
       StringData = "test123"
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-04-17
      • 2015-09-21
      • 1970-01-01
      • 1970-01-01
      • 2019-11-10
      • 2018-07-22
      • 1970-01-01
      相关资源
      最近更新 更多