3

API にレコードを書き込む (POST) ための JSON.Net クエリを作成しようとしている asp.net アプリケーションで作業しています。ただし、json文字列をAPIに渡すためにフォーマットする方法を見つけようとして問題が発生しています。

ベンダーのサポート ページの「例」には、次のヘッダー情報があります。

POST /extact/api/profiles/114226/pages/423833/records HTTP/1.1
Host: server.iPadDataForm.com
Authorization: Bearer 6bfd44fbdcdddc11a88f8274dc38b5c6f0e5121b
Content-Type: application/json
X-IFORM-API-REQUEST-ENCODING: JSON
X-IFORM-API-VERSION: 1.1  

質問:
JSON.Net を使用している場合、API に渡されるヘッダー情報を取得するにはどうすればよいですか? json.net websiteを見ましたが、まだ何も機能していません。

4

2 に答える 2

4

JSON.NET は、.NET オブジェクトを JSON にシリアライズおよびデシリアライズするためのライブラリです。HTTP リクエストの送信とは関係ありません。WebClientこの目的でa を使用できます。

たとえば、API を呼び出す方法は次のとおりです。

string url = "http://someapi.com/extact/api/profiles/114226/pages/423833/records";
using (var client = new WebClient())
{
    client.Headers[HttpRequestHeader.Authorization] = "Bearer 6bfd44fbdcdddc11a88f8274dc38b5c6f0e5121b";
    client.Headers[HttpRequestHeader.ContentType] = "application/json";
    client.Headers["X-IFORM-API-REQUEST-ENCODING"] = "JSON";
    client.Headers["X-IFORM-API-VERSION"] = "1.1";

    MyViewModel model = ...
    string jsonSerializedModel = JsonConvert.Serialize(model); // <-- Only here you need JSON.NET to serialize your model to a JSON string

    byte[] data = Encoding.UTF8.GetBytes(jsonSerializedModel);
    byte[] result = client.UploadData(url, data);

    // If the API returns JSON here you could deserialize the result
    // back to some view model using JSON.NET
}

このUploadDataメソッドは、HTTP POST 要求をリモート エンドポイントに送信します。例外を処理したい場合は、例外をtry/catchブロックに入れてキャッチWebExceptionできます。たとえば、リモート エンドポイントが 2xx 以外の HTTP 応答ステータス コードを返した場合に、このメソッドがスローする可能性があります。

この場合、例外を処理してリモート サーバーの応答を読み取る方法は次のとおりです。

try
{
    byte[] result = client.UploadData(url, data);
}
catch (WebException ex)
{
    using (var response = ex.Response as HttpWebResponse)
    {
        if (response != null)
        {
            HttpStatusCode code = response.StatusCode;
            using (var stream = response.GetResponseStream())
            using (var reader = new StreamReader(stream))
            {
                string errorContent = reader.ReadToEnd();
            }
        }
    }
}

catchステートメントで、サーバーから返された正確なステータス コードと応答ペイロードを特定する方法に注目してください。応答ヘッダーを抽出することもできます。

于 2013-08-27T16:12:02.263 に答える