RestSharp接受标头更改

时间:2013-05-18 23:16:53

标签: c# ruby http restsharp grape

我正在使用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标头添加自定义值?

1 个答案:

答案 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。这可以通过额外的工作进行定制。