JSON.NET 是用于将 .NET 对象序列化和反序列化为 JSON 的库。它与发送 HTTP 请求无关。你可以使用 aWebClient
来达到这个目的。
例如,以下是调用 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
语句中确定服务器返回的确切状态代码以及响应负载。您还可以提取响应标头。