web-dev-qa-db-fra.com

Où se trouve la méthode PostAsJsonAsync dans ASP.NET Core?

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?

27
LP13

Je ne mérite aucun crédit pour cela. Jetez un œil à la réponse @ danroth27 dans le lien suivant.

https://github.com/aspnet/Docs/blob/master/aspnetcore/mvc/controllers/testing/sample/TestingControllersSample/tests/TestingControllersSample.Tests/IntegrationTests/HttpClientExtensions.cs

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);
        }
    }
}
35
JenonD

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
    {
    }
8
JerryGoyal

Il fait partie de la bibliothèque Microsoft.AspNet.WebApi.Clienthttps://www.nuget.org/packages/Microsoft.AspNet.WebApi.Client/

7
Oliver

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"));
1
Anjyr

Mettez simplement à jour vos packages Nuget dans SDK .Net Core 2.1 ou vers le dernier SDK .Net Core et cela fonctionnera.

1
Israel Ocbina

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

0
j.ghadiri

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);
}
0
f.capet

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.

0
Jawid Hassim