2

最近我正在使用RestSharp来消耗我的 Restful Resouce。并期望在服务器和客户端之间与 JSON 交换数据。下面是我的 C# 代码。

var client = new RestSharp.RestClient();
var request = new RestRequest(sUrl,Method.POST);
request.RequestFormat = DataFormat.Json;
request.Timeout =  TIME_OUT_MILLISECONTS ;
request.AddHeader("Content-Type", "application/json");
request.AddBody(new { appID = sAppId, loginName = sUserName, password=sPassword });
var response = client.Execute(request);
string s=response.Content;//It is always XML format.

结果不是我所期望的(Json 数据格式),尽管我已经设置RequestFormat Json并添加了 Http 标头Content-Type。所以我决定使用 .Net Reflector 来找出 RestClient.Execute 方法中发生了什么。这是该方法的代码。

public RestClient()
    {
        ...
        this.AddHandler("application/json", new JsonDeserializer());
        this.AddHandler("application/xml", new XmlDeserializer());
        this.AddHandler("text/json", new JsonDeserializer());
        this.AddHandler("text/x-json", new JsonDeserializer());
        this.AddHandler("text/javascript", new JsonDeserializer());
        this.AddHandler("text/xml", new XmlDeserializer());
        this.AddHandler("*", new XmlDeserializer());
        ...
    }

我对此有一些疑问:

  1. 由于 RestClient 在 HttpWebRequest 中添加了多种类型Content-Type。构建请求是否正确?我想也许这就是为什么 Response.Content 总是 XML 的原因。

  2. 我不知道为什么 RestClient 需要构建一个HttpWebRequest这样的。这样做有什么意义吗?

  3. 如果我们在一个 Http Request 中同时指定了 JSon 和 XMl 消息格式,那么最后哪一个可以工作?是否允许?

谢谢。祝你有美好的一天。

4

1 回答 1

3

RestSharp 将根据响应的内容类型使用正确的处理程序。这就是那些AddHandlers 正在做的事情;它将 RestClient 配置为接受响应中的某些内容类型并将这些类型映射到反序列化器。通常,您希望为 json 内容类型设置一个接受标头,以通知服务器在响应中发送 json。

request.AddHeader("Accept", "application/json")

当然,这假设您访问的服务器配置为使用 json 响应。

于 2012-08-24T20:48:43.590 回答