我有两个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
值。
我在这里做什么错了?
答案 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值。