StringContent vs ObjectContent
Je suis en utilisant le Système.Net.L'adresse Http du HttpClient pour appeler une API REST avec "POST"
en utilisant le code suivant:
using (HttpRequestMessage requestMessage = new HttpRequestMessage(
HttpMethod.Post, new Uri(request)) { })
{
response = await httpClient.PostAsync(request, objectContent);
}
La "objectContent" est actuellement ce -
objectContent = new ObjectContent(jsonContent.GetType(),
jsonContent,
new JsonMediaTypeFormatter());
Je me demandais la différence que cela fait si c'était un StringContent plutôt qu'un ObjectContent comme ça?
objectContent = new StringContent(content);
objectContent.Headers.ContentType = MediaTypeHeaderValue.Parse("application/json");
Les deux fonctionnent très bien. Parce que c'est du JSON, j'ai tendance à supposer que StringContent aurait du sens. Mais quand est ObjectContent être utilisé parce qu'à peu près tout le contenu envoyé est une "chaîne".
OriginalL'auteur Lalman | 2015-06-08
Vous devez vous connecter pour publier un commentaire.
Dans votre exemple, il n'y aura aucune différence.
ObjectContent
permet simplement à un "plus large" gamme de types à envoyer parHttpClient
, tandis queStringContent
est plus étroite pourstring
valeurs, tels que JSON.StringContent
est un slim wrapper autour deByteArrayContent
, et mémorise la valeur passée comme unebyte[]
. Vous obtenez simplement l'avantage de ne pas avoir besoin de pour transformer votrestring
d'avant en arrière.Edit:
Compte tenu du fait que vous êtes à poster un JSON, vous pouvez même en faire moins verbeux en utilisant
HttpClientExtensions.PostAsJsonAsync<T>
:Merci pour mettre en évidence. J'ai manqué et a été de répondre à un commentaire.
Peut-être
PostAsJsonAsync
serait encore mieux, moins verbeux approche à poster un JSON. Voir mon edit.Je vais avoir des problèmes avec PostAsJsonAsync puisqu'il n'est pas y compris le Contenu de Longueur pour le ObjectContent. Mes données Json n'est pas réellement l'affichage à l'API. C'est l'affichage avec encodage de transfert en Bloc. Toutes les suggestions (en dehors de revenir à StringContent)?
OriginalL'auteur Yuval Itzchakov
Si quelqu'un va chercher à envoyer la demande par PostAsync .NET de Base 2.1:
Je n'ai pas trouvé PostAsJsonAsync méthode dans HttpClient, mais votre solution avec le cadre:
"faire le travail" parfaitement aussi .NET de Base.
Edit:
De plus, Si vous voulez ajouter votre propre en-tête, vous pouvez taper:
OriginalL'auteur greygreg87
ObjectContent est utilisé pour formater les plus complexes de types Mime à l'aide intégrée dans ou sur mesure formateurs. C'est OK pour utiliser ObjectContent pour une simple chaîne de caractères ainsi, il n'a pas beaucoup de différence, sauf pour la performance qui (à mon humble avis, et non vérifié) peut-être mieux avec StringContent, car il peut avoir été optimisé spécifiquement pour les chaînes de
Je souhaite que vous avez écrit. comment pour une utilisation simple chaîne de caractères comme ObjectContent. Viens de trouver moi-même en essayant d'utiliser une fonction générique qui crée la HTTPRequestMessage avec ObjectContent et un JsonMediaTypeFormatter:
new ObjectContent<TValue>(value, jsonFormatter);
. Mais lorsqu'il est passé d'un pré-json sérialisé chaîne de valeur, il bousille la chaîne en ajoutant un tas de "\". De toute façon, ma recherche se poursuit.OriginalL'auteur Denis Yarkovoy