Где метод 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);
}
}
}
Ответ 2
Он входит в состав библиотеки Microsoft.AspNet.WebApi.Client
https://www.nuget.org/packages/Microsoft.AspNet.WebApi.Client/
Ответ 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.)