HttpClient.DeleteAsync et le Contenu.ReadAdStringAsync toujours retourner la valeur null
Quand je suis en utilisant DeleteAsync
fonction dans HttpClient
(Système d'.Net.Http) et de récupérer le contenu avec Content.ReadAsStringAsync()
je reçois toujours null
retourné.
J'ai essayé la même chose avec GET
, POST
et PUT
- et ils retournent un résultat.
Voici mon code:
HttpClient _client = new HttpClient();
_client.BaseAddress = new Uri("http://httpbin.org/");
_client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
HttpResponseMessage response = _client.DeleteAsync("/delete").Result;
string res = await response.Content.ReadAsStringAsync();
return await JsonConvert.DeserializeObjectAsync<T>(res);
Je reçois toujours null
retourné.
Cependant, tout ceci fonctionne:
OBTENIR:
HttpResponseMessage response = _client.GetAsync("/get").Result;
string res = await response.Content.ReadAsStringAsync();
return await JsonConvert.DeserializeObjectAsync<T>(res);
POST:
HttpResponseMessage response = _client.PostAsync("/post", new StringContent(JsonConvert.SerializeObject(obj), Encoding.UTF8, "application/json")).Result;
string res = await response.Content.ReadAsStringAsync();
return await JsonConvert.DeserializeObjectAsync<T>(res);
METTRE:
HttpResponseMessage response = _client.PutAsync("/put", new StringContent(JsonConvert.SerializeObject(obj), Encoding.UTF8, "application/json")).Result;
string res = await response.Content.ReadAsStringAsync();
return await JsonConvert.DeserializeObjectAsync<T>(res);
Mais DeleteAsync()
et ReadAsStringAsync()
toujours me rendre null
.
Selon RFC vous devez retourner le corps au moment de retourner le code d'état 200 OK.
Avez-vous essayé d'utiliser Fiddler pour voir ce qui se passe sur le fil?
Ne devrait pas faire une différence sur le résultat, mais aucune raison pourquoi vous bloquez (appel
Erreur de débutant.
Ne devrait pas faire une différence sur le résultat, mais aucune raison pourquoi vous bloquez (appel
.Result
) sur DeleteAsync
au lieu de l'attente?Erreur de débutant.
OriginalL'auteur Gaui | 2013-07-14
Vous devez vous connecter pour publier un commentaire.
Votre code ne vérifie jamais le message de réponse pour le StatusCode. Contrairement à WebClient, HttpClient ne PAS les jeter quand la StatusCode est pas dans le 2xx gamme.
Je parie que si vous cochez la HttpResponseMessage.StatusCode/HttpResonseMessage.ReasonPhrase valeurs, vous trouverez que le serveur a renvoyé un code autre que de 200.
Par exemple:
Vous pouvez aussi appeler le EnsureSuccessStatusCode méthode lève une exception si l'état de la réponse n'est pas un code de réussite:
MODIFIER
Par la manière, l'exécution de la suivante comme c'est sur .NET 4.5, renvoie à un corps:
L'ajout de la
Accept
d'en-tête ne fait aucune différenceresponse.EnsureSuccessStatusCode();
- mais qui n'a rien changé. Le serveur respondes avec 200 OK. Mais je reçois toujours la valeur null. pastebin.com/dKb8BfBDPourquoi penses-tu que c'est mal? Le serveur peut ne pas avoir envoyé un corps. Vous devriez vérifier l'API du serveur pour voir s'il ne renvoie rien sur SUPPRIMER. En outre, pas tous les Api REST respecter les Rfc
Je suppose ASP.NET Web API ne pas la respecter. Parce que la méthode que j'utilise pour transmettre les données est exactement le même POST et PUT. Bizarre.
ASP.NET Web API renvoie ce que vous dites qu'il revienne. Si vous n'avez pas de retour pour le SUPPRIMER verbe, il n'y a rien à y retourner. En d'autres termes, vérifiez votre code
OriginalL'auteur Panagiotis Kanavos
J'ai le même cas... pour l'instant je ne sais pas de surcharge de la méthode pour DeleteAsync qui acceptent le contenu des paramètres comme la poste. Donc je passe API de Suppression de Poste.
OriginalL'auteur Benyamin Maengkom
Savez-vous:
OriginalL'auteur William Liu