web-dev-qa-db-ja.com

HTTPリクエストからJSONデータを受信する

正常に機能しているWebリクエストがありますが、ステータスOKを返すだけですが、返すように要求しているオブジェクトが必要です。私が要求しているJSON値を取得する方法がわかりません。オブジェクトHttpClientを使用するのは初めてですが、見逃しているプロパティはありますか?返されるオブジェクトが本当に必要です。助けてくれてありがとう

呼び出しを行う-正常に実行すると、ステータスOKが返されます。

HttpClient client = new HttpClient();
client.DefaultRequestHeaders.Accept
  .Add(new MediaTypeWithQualityHeaderValue("application/json"));
var responseMsg = client.GetAsync(string.Format("http://localhost:5057/api/Photo")).Result;

API getメソッド

//Cut out alot of code but you get the idea
public string Get()
{
    return JsonConvert.SerializeObject(returnedPhoto);
}
58
user516883

.NET 4.5でSystem.Net.HttpClientを参照している場合、 HttpResponseMessage.Content プロパティを HttpContent -派生オブジェクトとして使用して、GetAsyncによって返されるコンテンツを取得できます。 。その後、 HttpContent.ReadAsStringAsync メソッドを使用して、または ReadAsStreamAsync メソッドを使用してストリームとしてコンテンツを文字列に読み込むことができます。

HttpClient クラスのドキュメントには、次の例が含まれています。

  HttpClient client = new HttpClient();
  HttpResponseMessage response = await client.GetAsync("http://www.contoso.com/");
  response.EnsureSuccessStatusCode();
  string responseBody = await response.Content.ReadAsStringAsync();
115

@ Panagiotis Kanavos 'の答えに基づいて、文字列ではなくオブジェクトとして応答を返す例としての作業メソッドを次に示します。

public static async Task<object> PostCallAPI(string url, object jsonObject)
{
    try
    {
        using (HttpClient client = new HttpClient())
        {
            var content = new StringContent(jsonObject.ToString(), Encoding.UTF8, "application/json");
            var response = await client.PostAsync(url, content);
            if (response != null)
            {
                var jsonString = await response.Content.ReadAsStringAsync();
                return JsonConvert.DeserializeObject<object>(jsonString);
            }
        }
    }
    catch (Exception ex)
    {
        myCustomLogger.LogException(ex);
    }
    return null;
}

これは単なる例であり、using-clauseで使用する代わりに、HttpClientを共有インスタンスとして使用することをお勧めします。

13
Wouter Vanherck

最短の方法は次のとおりです。

var client = new HttpClient();
string reqUrl = $"http://myhost.mydomain.com/api/products/{ProdId}";
var prodResp = await client.GetAsync(reqUrl);
if (!prodResp.IsSuccessStatusCode){
    FailRequirement();
}
var prods = await prodResp.Content.ReadAsAsync<Products>();
0
Greg Z.

私が通常行うこと、答えに似ています:

var response = await httpClient.GetAsync(completeURL); // http://192.168.0.1:915/api/Controller/Object

if (response.IsSuccessStatusCode == true)
    {
        string res = await response.Content.ReadAsStringAsync();
        var content = Json.Deserialize<Model>(res);

// do whatever you need with the JSON which is in 'content'
// ex: int id = content.Id;

        Navigate();
        return true;
    }
    else
    {
        await JSRuntime.Current.InvokeAsync<string>("alert", "Warning, the credentials you have entered are incorrect.");
        return false;
    }

'model'はC#モデルクラスです。

0
James Heffer