使用HttpClient PostAsJsonAsync在ASP.NET Core中发送HTTP POST消息

21 浏览
0 Comments

使用HttpClient PostAsJsonAsync在ASP.NET Core中发送HTTP POST消息

我想将动态对象作为HTTP POST消息的主体发送,例如

new { x = 1, y = 2 };

所以我尝试编写

var client = new HttpClient();

但是我找不到方法

client.PostAsJsonAsync()

所以我尝试在project.json中添加Microsoft.AspNetCore.Http.Extensions包,并添加

using Microsoft.AspNetCore.Http.Extensions; 

到使用子句。然而,这并没有帮助我。

那么在ASP.NET Core中发送带有JSON主体的POST请求的最简单方法是什么?

0
0 Comments

问题出现的原因是Microsoft.AspNet.WebApi.Client包不是ASP.NET Core RC2库,也没有实现该功能。

解决方法是创建一个HttpClient扩展方法PostAsJsonAsync来避免代码重复。如果要在这种方式下添加头部信息例如授权密钥,可以使用Microsoft.Extensions.Http包中的IHttpClientFactory来创建HttpClient。

0
0 Comments

问题原因:在ASP.NET Core中使用HttpClient的PostAsJsonAsync方法发送HTTP POST请求时,可能会遇到无法发送请求的问题。

解决方法:为httpClient添加Accept头,并设置其值为"application/json"。

以下是完整的代码示例:

httpClient.DefaultRequestHeaders.Accept.Clear();
httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

这样设置后,HttpClient在发送POST请求时会自动将请求的Content-Type设置为"application/json",并且服务器端也会返回JSON格式的响应。

0
0 Comments

问题的出现原因:

在ASP.NET Core中使用HttpClient的PostAsync方法发送HTTP POST请求时,需要将对象转换为JSON格式,并将其作为请求的内容发送。在给定的示例中,使用了一个名为JsonContent的自定义类,该类继承自StringContent类,并在构造函数中将对象序列化为JSON格式,并设置Content-Type为application/json。

解决方法:

为了简化代码,可以考虑使用扩展方法来实现这个功能。可以创建一个名为JsonContent的扩展类,并为HttpClient类添加一个名为PostAsJsonAsync的扩展方法。该方法接受一个待序列化为JSON的对象作为参数,并在内部使用JsonConvert将其转换为JSON字符串,并通过PostAsync方法发送HTTP POST请求。

以下是实现该扩展方法的示例代码:

public static class JsonContent
{
    public static async Task PostAsJsonAsync(this HttpClient client, object toSerializeAsJson)
    {
        var json = JsonConvert.SerializeObject(toSerializeAsJson);
        var content = new StringContent(json, Encoding.UTF8, "application/json");
        return await client.PostAsync("https://...", content);
    }
}

使用该扩展方法时,可以通过以下方式发送HTTP POST请求:

var client = new HttpClient();
await client.PostAsJsonAsync(new { x = 1, y = 2 });

这样就可以将对象转换为JSON格式,并将其作为请求的内容发送。同时,Content-Length头部字段会根据HttpClient的设置而定,如果设置了TransferEncodingChunked为true,则不会设置Content-Length头部字段,而是会设置Transfer-Encoding为chunked。但是,如果使用var client = new HttpClient()创建HttpClient实例,则默认情况下会为该内容类设置Content-Length头部字段。

0