RestSharp接受标头更改

Iho*_*hor 7 c# ruby http ruby-grape restsharp

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

通过控制台测试命令工作完美

curl -H Accept=application/vnd.twitter-v1+json /statuses/public_timeline
Run Code Online (Sandbox Code Playgroud)

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

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

如何为Accept标头添加自定义值?

Jes*_*ebb 9

您可以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;
Run Code Online (Sandbox Code Playgroud)

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


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

RestSharp文档中有关反序列化的信息:

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

  • application/json - JsonDeserializer
  • application/xml - XmlDeserializer
  • text/json - JsonDeserializer
  • text/xml - XmlDeserializer
  • * - XmlDeserializer(未指定所有其他内容类型)

这就是说,默认情况下,如果响应的内容类型不是列出的内容类型,RestSharp将尝试在您的数据上使用XmlDeserializer.这可以通过额外的工作进行定制.