如何将 json 格式的有效负载附加到 RestSharp 请求中?

Posted

技术标签:

【中文标题】如何将 json 格式的有效负载附加到 RestSharp 请求中?【英文标题】:How to attach json-formatted payload into RestSharp request? 【发布时间】: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);返回响应。内容; 方法的返回是空字符串 :/ :/ 【参考方案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"
);

【讨论】:

以上是关于如何将 json 格式的有效负载附加到 RestSharp 请求中?的主要内容,如果未能解决你的问题,请参考以下文章

生成访问令牌时如何将 userid 参数添加到 jwt 的有效负载?

如何将嵌套 JSON 有效负载的最深层元素转换为 Power Query 中的单独行?

python google sheet API的无效JSON有效负载错误

如何将对象从 JSON 附加到 HTML 中的 div?

在 android 中收到的 FCM 数据有效负载不是 json 格式

如何在 pwn 攻击中通过 netcat 发送二进制有效负载