编程语言
首页 > 编程语言> > C#-使用HttpClient的简单POST

C#-使用HttpClient的简单POST

作者:互联网

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

出于某种原因,当我使用[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"));
}

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

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

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

我在这里做错了什么?

解决方法:

ASP.NET Core不支持开箱即用的文本/纯文本内容类型,因此服务器拒绝您的请求,因为使用[FromBody]属性时它无法解析.

在评论中,您说:

Ultimately I won’t be sending text. My main concern here is that I’m not hitting my API method. […] Once I make sure everything is working, I’ll be sending JSON data which will get deserialized on the receiving end.

为了测试问题是否归因于文本/纯文本Content-Type,您可以将PostAsync行更新为以下内容:

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

由于默认情况下application / json是受支持的Content-Type,因此上面的代码使用了该类型,并使用“”包装了您发送的值,以使其成为有效的JSON值.

标签:asp-net-core,dotnet-httpclient,c
来源: https://codeday.me/bug/20191024/1924045.html