JSON.NET是用于将.NET对象序列化并反序列化为JSON的库。它与发送HTTP请求无关。你可以使用WebClient
来达到这个目的。
例如这里是你如何可以调用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
声明,你可以决定由服务器返回以及响应的确切状态码有效载荷。你也可以提取响应头文件。
http://stackoverflow.com/a/6055838/264607 – BlackICE