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