LP1*_*P13 34 c# .net-core coreclr asp.net-core
我PostAsJsonAsync
在ASP.NET核心中寻找扩展方法.根据这里的文章,它在Microsoft.AspNet.WebApi.Client
组装中可用.不过我虽然微软已将所有程序集名称从Microsoft.AspNet
更改Microsoft.AspNetCore
为更具体的.Net Core框架.但我找不到Microsoft.AspNetCore.WebApi.Client
PostAsJsonAsync
ASP.NET核心中的扩展方法在哪里?
Jen*_*onD 38
我不值得为此付出任何荣誉.看看以下链接中的@ 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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
Oli*_*ver 14
它是库https://www.nuget.org/packages/Microsoft.AspNet.WebApi.Client/的一部分Microsoft.AspNet.WebApi.Client
您可以使用此扩展在 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);
}
}
Run Code Online (Sandbox Code Playgroud)
这不是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
{
}
Run Code Online (Sandbox Code Playgroud)
从.NET 5.0 开始,这已被(重新)引入,作为HttpClient
, 通过System.Net.Http.Json
命名空间的扩展方法。有关HttpClientJsonExtensions
详细信息,请参阅类。
它的工作原理如下:
var httpClient = new HttpClient();
var url = "https://StackOverflow.com"
var data = new MyDto();
var source = new CancellationTokenSource();
var response = await httpClient.PostAsJsonAsync<MyDto>(url, data, source.Token);
Run Code Online (Sandbox Code Playgroud)
而且,当然,您需要引用一些命名空间:
using System.Net.Http; //HttpClient, HttpResponseMessage
using System.Net.Http.Json; //HttpClientJsonExtensions
using System.Threading; //CancellationToken
using System.Threading.Tasks; //Task
Run Code Online (Sandbox Code Playgroud)
这是基于@erandac之前引用的设计文档——尽管此后设计发生了变化,特别是对于PostAsJsonAsync()
方法。
显然,这并不能解决任何仍在使用 .NET Core 的人的问题,但是随着.NET 5.0 的发布,这现在是最好的选择。
这来晚了,但我认为这可能会帮助某人。因此,这些*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);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
24443 次 |
最近记录: |