【问题标题】:RestSharp Accept header changeRestSharp 接受标头更改
【发布时间】:2016-10-13 22:40:34
【问题描述】:

我正在使用 RestSharp 在客户端进行开发。我还在服务器端为我的自定义 API 使用 Ruby Grape gem。 Grape gem 可以通过将 Accept HTTP header f.e 设置为 application/vnd.twitter-v1+json 来进行版本控制

通过控制台的测试命令完美运行

curl -H Accept=application/vnd.twitter-v1+json /statuses/public_timeline

但是当我尝试为 RestRequest 设置标头时,我在服务器上收到了error 404

我不知道为什么会这样。我发现服务器返回 406 error 的另一个问题 - 但在我的情况下是 404。

如何为 Accept 标头设置自定义值?

【问题讨论】:

    标签: c# ruby http restsharp ruby-grape


    【解决方案1】:

    您可以使用AddHeader 方法设置自定义Accept 标头...

    var client = new RestClient("http://example.com/api");
    var request = new RestRequest("statuses/public_timeline", Method.GET);
    request.AddHeader("Accept", "application/vnd.twitter-v1+json");
    var response = client.Execute(request);
    var json = response.Content;
    

    如果您愿意自己反序列化 JSON,这应该可以正常工作。


    如果你想使用通用的Execute<T> 方法,它会为你自动反序列化,你会遇到问题...

    来自RestSharp documentation about deserialization

    RestSharp 包含用于处理 XML 和 JSON 的反序列化程序。收到响应后,RestClient 会根据服务器返回的 Content Type 选择要使用的正确反序列化器。可以覆盖默认值(请参阅自定义)。支持的内置内容类型有:

    • 应用程序/json – JsonDeserializer
    • 应用程序/xml – XmlDeserializer
    • 文本/json – JsonDeserializer
    • 文本/xml – XmlDeserializer
    • * – XmlDeserializer(未指定所有其他内容类型)

    这意味着,默认情况下,如果响应的内容类型不是列出的内容类型之一,RestSharp 将尝试对您的数据使用 XmlDeserializer。这是可定制的,但需要额外的工作。

    【讨论】:

      猜你喜欢
      • 2014-10-15
      • 2016-03-09
      • 1970-01-01
      • 1970-01-01
      • 2016-04-11
      • 2010-09-20
      • 2013-05-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多