webentwicklung-frage-antwort-db.com.de

JSON-Daten von HTTP-Anforderung zurückerhalten

Ich habe eine ordnungsgemäß funktionierende Webanforderung, die jedoch nur den Status OK zurückgibt. Ich benötige jedoch das Objekt, um das ich es zurückgeben möchte. Ich bin nicht sicher, wie ich den angeforderten json-Wert erhalten soll. Ich bin neu in der Verwendung des Objekts HttpClient. Gibt es eine Eigenschaft, die ich verpasse? Ich brauche das zurückkehrende Objekt wirklich. Vielen Dank für jede Hilfe

Anruf tätigen - läuft einwandfrei, gibt den Status OK zurück.

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

Die api get Methode

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

Wenn Sie in .NET 4.5 auf den System.Net.HttpClient verweisen, können Sie den von GetAsync zurückgegebenen Inhalt mit der Eigenschaft HttpResponseMessage.Content als HttpContent - abgeleitetes Objekt abrufen . Anschließend können Sie den Inhalt mithilfe der HttpContent.ReadAsStringAsync -Methode oder mithilfe der ReadAsStreamAsync -Methode als Stream in einen String lesen.

Die Dokumentation der Klasse HttpClient enthält das folgende Beispiel:

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

Aufbauend auf @ Panagiotis Kanavos 'Antwort, hier ist eine Arbeitsmethode als Beispiel, die auch die Antwort als Objekt anstelle eines Strings zurückgibt:

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;
}

Denken Sie daran, dass dies nur ein Beispiel ist und dass Sie HttpClient wahrscheinlich als gemeinsam genutzte Instanz verwenden möchten, anstatt es in einer using-Klausel zu verwenden.

13
Wouter Vanherck

Ich denke, der kürzeste Weg ist:

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.

Was ich normalerweise mache, ähnlich wie bei einer Antwort:

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;
    }

Wobei 'model' Ihre C # -Modellklasse ist.

0
James Heffer