Где метод PostAsJsonAsync в ASP.NET Core?

Я искал метод расширения PostAsJsonAsync в ядре ASP.NET. Основываясь на статье здесь, она доступна в сборке Microsoft.AspNet.WebApi.Client. Однако, хотя Microsoft изменила все имена сборки от Microsoft.AspNet до Microsoft.AspNetCore, чтобы быть более конкретными с .Net Core framework. Но я не мог найти Microsoft.AspNetCore.WebApi.Client

Где PostAsJsonAsync метод расширения в ядре ASP.NET?

Ответ 1

Я не заслуживаю этого. Посмотрите @danroth27 ответ в следующей ссылке.

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

Он использует метод расширения. Код, как показано ниже. (Скопировано из приведенной выше ссылки github). Я использую его на .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);
        }
    }
}

Ответ 3

Это не является частью проекта ASP.NET Core. Однако вы можете продолжить:

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

Ответ 4

Это происходит поздно, но я думаю, что это может помочь кому-то спуститься. Поэтому методы *AsJsonAsync() не являются частью проекта ASP.NET Core. Я создал пакет, который дает вам функциональность. Вы можете получить его на Nuget.

https://www.nuget.org/packages/AspNetCore.Http.Extensions

using AspNetCore.Http.Extensions;
...
HttpClient client = new HttpClient();
client.PostAsJsonAsync('url', payload);

Ответ 5

Просто обновите свои пакеты Nuget в SDK.Net Core 2.1 или до последней версии .Net Core SDK, и он будет работать.

Ответ 6

Вам нужно добавить пакет Nuget System.Net.Http.Formatting.Extension в ваш проект.

Или вы можете использовать

client.PostAsync(uri, new StringContent(data, Encoding.UTF8, "application/json"));

Ответ 7

Это теоретически...

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

...Скрещенные пальцы.

Ответ 8

сделайте метод расширения действительно асинхронным:

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

Ответ 9

Вы можете использовать это расширение для использования метода PostAsJsonAsync в ядре 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);
    }
}

см.: httpclient-extensions

Ответ 10

Метод PostAsJsonAsync (наряду с другими методами *Async класса HttpClient) действительно доступно из коробки - без использования директив.

Ваш файл .csproj должен начинаться с <Project Sdk="Microsoft.NET.Sdk.Web">, и содержат строки

<ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore.App" />
</ItemGroup>

Я считаю, что это дубликат, и дал более подробный ответ на fooobar.com/info/59793/....

(PackageReference больше не требуется в .NET Core 3.0.)