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.

RequestFormat JsonHttp header を設定して追加しましたが、結果は私が期待したもの(Jsonデータ形式)ではありません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は、応答のコンテンツタイプに基づいて正しいハンドラーを使用します。それが彼らAddHandlerがしていることです。応答で特定のコンテンツタイプを受け入れるようにRestClientを構成し、それらのタイプをデシリアライザーにマッピングします。通常、応答でjsonを送信するようにサーバーに通知するjsonコンテンツタイプのacceptヘッダーを設定する必要があります。

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

もちろん、これは、アクセスしているサーバーがjsonで応答するように構成されていることを前提としています。

于 2012-08-24T20:48:43.590 に答える