web-dev-qa-db-ja.com

ASP.NET CoreのPostAsJsonAsyncメソッドはどこにありますか?

ASP.NETコアでPostAsJsonAsync拡張メソッドを探していました。記事に基づいて こちらMicrosoft.AspNet.WebApi.Client Assemblyで利用可能。ただし、Microsoftは、すべてのアセンブリ名をMicrosoft.AspNetからMicrosoft.AspNetCoreに変更して、.Net Coreフレームワークにより具体的にしました。しかし、Microsoft.AspNetCore.WebApi.Clientが見つかりませんでした

ASP.NETコアのPostAsJsonAsync拡張メソッドはどこにありますか?

27
LP13

私はこれに何の価値もありません。次のリンクで@ 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);
        }
    }
}
35
JenonD

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

ライブラリの一部として提供されますMicrosoft.AspNet.WebApi.Clienthttps://www.nuget.org/packages/Microsoft.AspNet.WebApi.Client/

7
Oliver

これは遅れていますが、誰かが助けになるかもしれません。したがって、*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"));
1
Anjyr

NugetパッケージをSDK .Net Core 2.1または最新の.Net Core SDKに更新するだけで機能します。

1
Israel Ocbina

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

参照: httpclient-extensions

0
j.ghadiri

拡張メソッドを完全に非同期にします:

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

これは理論的です...

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

...指が交差しました。

0
Jawid Hassim