参考
HttpClient
HttpClientの類の使い方 - マイクロソフト系技術情報 Wiki
開発者を苦しめる.NETのHttpClientのバグと紛らわしいドキュメント
jsonパース関係
Json.NET (Newtonsoft.Json) の基本的な使い方 | @Subaru
Querying JSON with LINQ
httpClient
以下、IBMのlanguage-translatorを使うサンプルです
using System;
using System.Net;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Threading.Tasks;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System.Net.Http.Formatting;
namespace FeedReader
{
public class TransMessage
{
public string text { get; set; }
public string source { get; set; }
public string target { get; set; }
}
public class WatsonTranslator
{
private static HttpClient _httpClient = new HttpClient();
private const string userName = "";
private const string passWord = "";
private const string url = "https://gateway.watsonplatform.net/language-translator/api/v2/translate";
public async static Task<dynamic> Load()
{
var msg = new TransMessage();
msg.text = "Hello";
msg.source = "en";
msg.target = "ja";
string json = Newtonsoft.Json.JsonConvert.SerializeObject(msg);
var result = await PostAsyncToWatson(json);
return result;
}
/// <summary>
///
/// </summary>
/// <param name="json"></param>
/// <returns></returns>
public async static Task<string> PostAsyncToWatson(string json)
{
//送信オプション
_httpClient.DefaultRequestHeaders.Clear();
//認証方式をセット - Basic認証
var userPass = System.Text.Encoding.ASCII.GetBytes($"{userName}:{passWord}");
_httpClient.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Basic", Convert.ToBase64String(userPass));
//Accept(要求)方式をセット
_httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
//content作成
var content = new ByteArrayContent(System.Text.Encoding.UTF8.GetBytes(json));
content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
//Post送信
var response = await _httpClient.PostAsync(url, content);
//応答を取得しJsonに変換
//var responseResult = await response.Content.ReadAsStringAsync();
JObject jres = await response.Content.ReadAsAsync<JObject>(new[] { new JsonMediaTypeFormatter() });
//translationsの情報をArrayで取得
var jarr = jres["translations"] as JArray;
var translation = jarr.First;
//translationを取得
var nameValue = translation["translation"] as JValue;
var result = nameValue.Value as string;
//応答
return result;
}
}
}