Je cherchais la méthode d'extension PostAsJsonAsync
dans le noyau ASP.NET. Basé sur l'article ici son disponible en Microsoft.AspNet.WebApi.Client
Assemblée. Cependant, si Microsoft a changé tous les noms d'assembly de Microsoft.AspNet
à Microsoft.AspNetCore
pour être plus précis avec le framework .Net Core. Mais je n'ai pas pu trouver Microsoft.AspNetCore.WebApi.Client
Où se trouve la méthode d'extension PostAsJsonAsync
dans le noyau ASP.NET?
Je ne mérite aucun crédit pour cela. Jetez un œil à la réponse @ danroth27 dans le lien suivant.
Il utilise une méthode d'extension. Code comme ci-dessous. (Copié à partir du lien github ci-dessus). Je l'utilise sur .Net Core 2.0.
using System.Net.Http;
using System.Net.Http.Headers;
using System.Threading.Tasks;
using Newtonsoft.Json;
namespace TestingControllersSample.Tests.IntegrationTests
{
public static class HttpClientExtensions
{
public static Task<HttpResponseMessage> PostAsJsonAsync<T>(
this HttpClient httpClient, string url, T data)
{
var dataAsString = JsonConvert.SerializeObject(data);
var content = new StringContent(dataAsString);
content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
return httpClient.PostAsync(url, content);
}
public static async Task<T> ReadAsJsonAsync<T>(this HttpContent content)
{
var dataAsString = await content.ReadAsStringAsync();
return JsonConvert.DeserializeObject<T>(dataAsString);
}
}
}
Cela ne fait pas partie du projet ASP.NET Core. Cependant, vous pouvez procéder avec:
HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, "http://myurl/api");
string json = JsonConvert.SerializeObject(myObj);
request.Content = new StringContent(json, System.Text.Encoding.UTF8, "application/json");
HttpClient http = new HttpClient();
HttpResponseMessage response = await http.SendAsync(request);
if (response.IsSuccessStatusCode)
{
}
else
{
}
Il fait partie de la bibliothèque Microsoft.AspNet.WebApi.Client
https://www.nuget.org/packages/Microsoft.AspNet.WebApi.Client/
cela arrive tard mais je pense que cela peut aider quelqu'un sur la ligne. Les méthodes *AsJsonAsync()
ne font donc pas partie du projet ASP.NET Core. J'ai créé un package qui vous donne la fonctionnalité. Vous pouvez l'obtenir sur Nuget.
https://www.nuget.org/packages/AspNetCore.Http.Extensions
using AspNetCore.Http.Extensions;
...
HttpClient client = new HttpClient();
client.PostAsJsonAsync('url', payload);
Vous devez ajouter le package Nuget System.Net.Http.Formatting.Extension
à votre projet.
Ou vous pouvez utiliser
client.PostAsync(uri, new StringContent(data, Encoding.UTF8, "application/json"));
Mettez simplement à jour vos packages Nuget dans SDK .Net Core 2.1 ou vers le dernier SDK .Net Core et cela fonctionnera.
Vous pouvez utiliser cette extension pour utiliser la méthode PostAsJsonAsync dans le noyau ASP.NET
using System.Net.Http;
using System.Net.Http.Headers;
using System.Threading.Tasks;
using Newtonsoft.Json;
public static class HttpClientExtensions
{
public static Task<HttpResponseMessage> PostAsJsonAsync<T>(this HttpClient httpClient, string url, T data)
{
var dataAsString = JsonConvert.SerializeObject(data);
var content = new StringContent(dataAsString);
content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
return httpClient.PostAsync(url, content);
}
public static Task<HttpResponseMessage> PutAsJsonAsync<T>(this HttpClient httpClient, string url, T data)
{
var dataAsString = JsonConvert.SerializeObject(data);
var content = new StringContent(dataAsString);
content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
return httpClient.PutAsync(url, content);
}
public static async Task<T> ReadAsJsonAsync<T>(this HttpContent content)
{
var dataAsString = await content.ReadAsStringAsync().ConfigureAwait(false);
return JsonConvert.DeserializeObject<T>(dataAsString);
}
}
voir: httpclient-extensions
rendre la méthode d'extension vraiment asynchrone:
public static async Task<HttpResponseMessage> PostAsJsonAsync<T>(
this HttpClient httpClient, string url, T data)
{
var dataAsString = JsonConvert.SerializeObject(data);
var content = new StringContent(dataAsString);
content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
return await httpClient.PostAsync(url, content);
}
C'est théorique ...
public static async System.Threading.Tasks.Task<HttpResponseMessage> PostJsonAsync(object dataclass, string Url)
{
using (var client = new HttpClient())
return await client.PostAsync(Url, new StringContent(Newtonsoft.Json.JsonConvert.SerializeObject(dataclass), System.Text.Encoding.UTF8, "application/json"));
}
...Doigts croisés.