RestSharp 用法

标签 rest http-headers wcf-rest restsharp

最近我在使用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());
        ...
    }

我对此有一些疑问:

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

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

  3. 如果我们在 Http 请求中同时指定 JSon 和 XMl 消息格式,最终哪一种有效?允许吗?

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

最佳答案

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

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

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

关于RestSharp 用法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12091023/

相关文章:

security - 服务器到服务器 REST API 安全性

api - 为 API 设置 Strict-Transport-Security header

php - 在 Safari 中使用用户名和密码重定向到 FTP URL

c# - WCF Restful 服务是否允许公开与 WebGet 和 WebInvoke 相同的方法?

java - 添加 HttpServletResponse/HttpServletRequest 作为方法参数时 Spring 请求挂起

architecture - 在 REST 与 SOAP 服务之间进行选择的指南?

asp.net - 使用 POST/JSON 在 2003 上托管 WCF Rest 服务

c# - WCF Restful 服务和 WCF 数据服务

java - JAX-RS @PathParam : how to pass anything including "?"

http - 如果 GET 请求中未指定 http 版本,为什么服务器不等待 http header ?