使用HttpClient进行简单的POST

时间:2018-11-30 18:33:12

标签: c# asp.net-core dotnet-httpclient

我有两个ASP.NET Core 2.1应用程序,我正在尝试使用POST从一个应用程序到另一个应用程序进行简单的HttpClient调用。

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

这是我在发件人上的代码。首先,这就是我的ConfigureServices方法中的内容。我正在使用ASP.NET Core 2.1中的新HttpClientFactory功能。我还创建了一个名为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);
});

这是myApiCallerClient中的代码:

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

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

[HttpPost]
public async Task Post([FromBody]string input)
{
    // Some logic
}

如果我使用[FromBody]并且发信人收到BadRequest错误,我的电话将无法使用此方法。如果我使用[FromHeader],我的请求将使用此API方法,但我得到的是null值。

我在这里做什么错了?

1 个答案:

答案 0 :(得分:4)

ASP.NET Core不支持Content-Type中的text/plain,因此服务器拒绝了您的请求,因为使用{{1}时它无法解析}属性。

您在评论中说:

  

最终我不会发送短信。我主要的担心是我没有使用我的API方法。 [...]确定一切正常后,我将发送JSON数据,该数据将在接收端反序列化。

为了测试问题是否是由于[FromBody] text/plain引起的,您可以将Content-Type行更新为以下内容:

PostAsync

默认情况下,var response = await _httpClient.PostAsync( "test", new StringContent("\"Saying hello!\"", System.Text.Encoding.UTF8, "application/json")); 受支持的application/json,因此上面的代码使用了该代码并包装了您通过Content-Type发送的值,以便它是有效的JSON值。