写入第三方API

时间:2013-08-27 16:08:23

标签: c# asp.net api json.net

我正在一个asp.net应用程序中尝试编写JSON.Net查询以将记录写入(POST)到API。但是,我无法弄清楚如何格式化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,但还没有任何效果。

2 个答案:

答案 0 :(得分:4)

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语句中,您可以确定服务器返回的确切状态代码以及响应有效负载。您还可以提取响应标头。

答案 1 :(得分:0)

使用Web API或MVC API。

如果你想知道差异。

http://encosia.com/asp-net-web-api-vs-asp-net-mvc-apis/

Dave Ward的ASP.NET Web API与ASP.NET MVC“API”

总之,差异是:

内容协商 灵活性 关注点分离