我有两个ASP.NET核心2.1应用程序,我正在尝试使 POST 使用从一个应用程序呼叫另一个应用程序 HttpClient .
POST
HttpClient
因为某种原因,当我使用 [FromBody] 为了得到我正在尝试接收的简单文本,我得到一个 BadRequest 错误。
[FromBody]
BadRequest
这是我发件人的密码。首先,这是我的 ConfigureServices 方法。我用的是新的 HttpClientFactory ASP.NET核心2.1中的功能。我还创建了一个名为 myApiCallerClient 它处理我的API调用:
ConfigureServices
HttpClientFactory
myApiCallerClient
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() API方法 TestController :
POST()
TestController
[HttpPost] public async Task Post([FromBody]string input) { // Some logic }
如果我使用 [来自身体] 我得到 恶意请求 发件人出错。如果我使用 [FromHeader] 我的请求点击了这个API方法,但是我得到了一个 null 价值。
[来自身体]
恶意请求
[FromHeader]
null
我在这里做错什么了?
ASP.NET核心不支持 Content-Type 属于 text/plain 开箱即用,因此服务器拒绝您的请求,因为它不是使用 [FromBody] 属性。
Content-Type
text/plain
在评论中,你说:
最终我不会发短信。我主要关心的是我没有使用API方法。一旦我确认一切正常,我将发送JSON数据,这些数据将在接收端进行反序列化。
为了测试问题是否由 文本/平原 内容类型 ,您可以更新 PostAsync 这样的行:
文本/平原
内容类型
PostAsync
var response = await _httpClient.PostAsync( "test", new StringContent("\"Saying hello!\"", System.Text.Encoding.UTF8, "application/json"));
AS application/json 是 受支撑的 内容类型 默认情况下,上面的代码使用该值并包装发送时使用的值 " 为了使它成为有效的JSON值。
application/json
"