7

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

通过控制台测试命令完美无缺

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

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

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

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

4

1 回答 1

10

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

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 文档

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

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

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

于 2013-08-08T22:00:08.953 回答