RestSharp 接受标头更改

8

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

同时,通过控制台测试命令也能完美运行。

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

但是,当我尝试为RestRequest设置标题时,服务器返回 404错误

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

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

1个回答

11

您可以使用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有关反序列化的文档中:

RestSharp包括解析器以处理XML和JSON。接收响应时,RestClient根据服务器返回的内容类型选择要使用的正确解析器。默认值可以被覆盖(请参见自定义)。支持的内置内容类型包括:

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

这意味着,默认情况下,如果响应的内容类型不属于上述类型之一,则RestSharp将尝试在数据上使用XmlDeserializer。但是,通过额外的工作,可以对此进行自定义。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接