使用 HttpClient 的简单 POST

Sam*_*Sam 6 c# dotnet-httpclient asp.net-core

我有两个 ASP.NET Core 2.1 应用程序,我正在尝试POST使用HttpClient.

出于某种原因,当我[FromBody]用来获取我尝试接收的简单文本时,出现BadRequest错误。

这是我的发件人代码。首先,这就是我的ConfigureServices方法。我正在使用HttpClientFactoryASP.NET Core 2.1 中的新功能。我还创建了一个名为的客户端类myApiCallerClient来处理我的 API 调用:

services.AddHttpClient("myNamedClient", client =>
{
    client.BaseAddress = new Uri("http://localhost:50625/api/");
    client.DefaultRequestHeaders.Clear();
    client.DefaultRequestHeaders.Add("Accept", "application/json");
});

services.AddScoped(x => {
   var httpClientFactory = x.GetRequiredService<System.Net.Http.IHttpClientFactory>();
   var myApiCallerClient = httpClientFactory.CreateClient("myNamedClient");
   return new Clients.ApiCaller.ApiCallerClient(myApiCallerClient);
});
Run Code Online (Sandbox Code Playgroud)

这是 myApiCallerClient 中的代码:

public async Task SayHello()
{
     var response = await _httpClient.PostAsync("test", new StringContent("Saying hello!", System.Text.Encoding.UTF8, "text/plain"));
}
Run Code Online (Sandbox Code Playgroud)

这是我在接收端的代码,它是 中的POST()API 方法TestController

[HttpPost]
public async Task Post([FromBody]string input)
{
    // Some logic
}
Run Code Online (Sandbox Code Playgroud)

如果我使用[FromBody]并且我BadRequest在发件人处收到错误,则我的呼叫不会命中此方法。如果我使用[FromHeader]我的请求命中这个 API 方法,但我得到了一个null值。

我在这里做错了什么?

Kir*_*kin 5

ASP.NET核心不支持Content-Typetext/plain开箱即用,所以服务器拒绝你的要求,因为它不是东西,它可以解析使用时[FromBody]的属性。

在评论中,你说:

最终我不会发送文本。我在这里主要担心的是我没有使用我的 API 方法。[...] 一旦我确保一切正常,我将发送 JSON 数据,这些数据将在接收端反序列化。

为了测试问题是否是由于text/plain Content-Type,您可以将您的PostAsync行更新为如下所示:

var response = await _httpClient.PostAsync(
    "test",
    new StringContent("\"Saying hello!\"", System.Text.Encoding.UTF8, "application/json"));
Run Code Online (Sandbox Code Playgroud)

作为application/json 支持的Content-Type默认情况下,上面的代码将使用和包装你发送了价值",以使其成为有效的JSON值s。