ASP.NETコアでPostAsJsonAsync
拡張メソッドを探していました。記事に基づいて こちらMicrosoft.AspNet.WebApi.Client
Assemblyで利用可能。ただし、Microsoftは、すべてのアセンブリ名をMicrosoft.AspNet
からMicrosoft.AspNetCore
に変更して、.Net Coreフレームワークにより具体的にしました。しかし、Microsoft.AspNetCore.WebApi.Client
が見つかりませんでした
ASP.NETコアのPostAsJsonAsync
拡張メソッドはどこにありますか?
私はこれに何の価値もありません。次のリンクで@ danroth27の回答をご覧ください。
彼は拡張メソッドを使用します。以下のコード。 (上記の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);
}
}
}
これは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
{
}
ライブラリの一部として提供されますMicrosoft.AspNet.WebApi.Client
https://www.nuget.org/packages/Microsoft.AspNet.WebApi.Client/
これは遅れていますが、誰かが助けになるかもしれません。したがって、*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);
Nugetパッケージを追加する必要がありますSystem.Net.Http.Formatting.Extension
プロジェクトに。
または、使用できます
client.PostAsync(uri, new StringContent(data, Encoding.UTF8, "application/json"));
NugetパッケージをSDK .Net Core 2.1または最新の.Net Core SDKに更新するだけで機能します。
ASP.NETコアでPostAsJsonAsyncメソッドを使用するためにこの拡張機能を使用できます
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);
}
}
拡張メソッドを完全に非同期にします:
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);
}
これは理論的です...
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"));
}
...指が交差しました。