我正在使用RestSharp在客户端进行开发。我也在服务器端使用Ruby Grape gem作为我的自定义API。 Grape gem可以通过将Accept HTTP标头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标头添加自定义值?
答案 0 :(得分:7)
您可以使用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 documentation about deserialization:
RestSharp包含用于处理XML和JSON的反序列化器。收到响应后,RestClient会根据服务器返回的内容类型选择正确的反序列化器。可以覆盖默认值(请参阅自定义)。支持的内置内容类型包括:
- application / json - JsonDeserializer
- application / xml - XmlDeserializer
- text / json - JsonDeserializer
- text / xml - XmlDeserializer
- * - XmlDeserializer(未指定所有其他内容类型)
这就是说,默认情况下,如果响应的内容类型不是列出的内容类型之一,RestSharp将尝试在您的数据上使用XmlDeserializer。这可以通过额外的工作进行定制。