最近我在使用RestSharp消耗我的 Restful 资源。并期望在服务器和客户端之间使用 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.
尽管我设置了 RequestFormat Json
并添加了 Http header Content-Type
,但结果不是我所期望的(Json 数据格式)。所以我决定使用.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());
...
}
我对此有一些疑问:
由于RestClient在HttpWebRequest中添加了多种
Content-Type
。构建请求的正确方法吗?我想也许这就是 Response.Content 总是 XML 的原因。我不知道为什么 RestClient 需要构建这样的
HttpWebRequest
。这样做有什么意义吗?如果我们在 Http 请求中同时指定 JSon 和 XMl 消息格式,最终哪一种有效?允许吗?
谢谢。祝你有美好的一天。
最佳答案
RestSharp 将根据响应的内容类型使用正确的处理程序。这就是那些 AddHandler
正在做的事情;它配置 RestClient 以接受响应中的某些内容类型并将这些类型映射到反序列化器。通常,您需要为 json 内容类型设置一个接受 header ,通知服务器在响应中发送 json。
request.AddHeader("Accept", "application/json")
当然,这假设您正在访问的服务器配置为使用 json 进行响应。
关于RestSharp 用法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12091023/