134 votes

Réception des données JSON de la requête HTTP

J'ai une requête web qui fonctionne correctement, mais elle ne fait que renvoyer le statut OK, mais j'ai besoin de l'objet que je demande pour qu'il revienne. Je ne sais pas comment obtenir la valeur json que je demande. Je suis nouveau dans l'utilisation de l'objet HttpClient, y a-t-il une propriété qui me manque ? J'ai vraiment besoin de l'objet retourné. Merci pour votre aide

Passer l'appel - fonctionne bien renvoie le statut 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;

La méthode api get

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

65voto

Wouter Vanherck Points 510

S'appuyant sur la réponse de @Panagiotis Kanavos, voici un exemple de méthode de travail qui retournera également la réponse en tant qu'objet au lieu d'une chaîne :

using System.Text;
using System.Net.Http;
using System.Threading.Tasks;
using Newtonsoft.Json; // Nuget Package

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

Gardez à l'esprit que ce n'est qu'un exemple et que vous aimeriez probablement utiliser HttpClient comme une instance partagée au lieu de l'utiliser dans une clause using.

10voto

user1760329 Points 138

Je pense que le moyen le plus court est :

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>();

2voto

James Heffer Points 178

Ce que je fais normalement, similaire à la réponse une :

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

Où « modèle » est votre classe de modèle C#.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X