我正在使用ASP.NET
版本5.2.3
。当我使用版本为HTTP
的其他POST
应用程序执行ASP.NET Core
2.0.5
时,API
端点的NULL
值为ViewModel
即使有一个身体。当我使用来自CURL
和VSCode-RestClient
的同一个来电时,ViewModel
不再是NULL
。但是当我从ASP.NET Core
应用程序调用并添加语句时:
if (Request.InputStream == null) { };
在Global.asax.cs
方法Application_BeginRequest
中,ViewModel
不再是NULL
。这是我唯一的改变。
我不明白为什么承认Request.InputStream
的存在可以解决问题。能够解决核心问题会很好。只是不确定如何。如果有人经历过这个,那么知道发生了什么会很好!
这是我用来发现ASP.NET Core
应用程序发送给我的内容的代码:
System.Diagnostics.Debug.WriteLine("");
foreach (var headerO in Request.Headers)
{
var header = headerO.ToString();
System.Diagnostics.Debug.WriteLine($"{header}: {Request.Headers[header]}");
}
var bytes = new byte[Request.InputStream.Length];
Request.InputStream.Read(bytes, 0, bytes.Length);
Request.InputStream.Position = 0;
string content = System.Text.Encoding.ASCII.GetString(bytes);
System.Diagnostics.Debug.WriteLine(content);
我将该代码放在同一个Application_BeginRequest
方法中。当然,当我进行上述修复时,我删除了该代码。
更新:
它显示在客户端ASP.NET Core
应用中使用PostAsJsonAsync
进行调用我更改了它以使用Json.NET
解析数据,然后使用PostAsync
方法。 PostAsJsonAsync
方法一定有问题或库中有些冲突?不完全确定。
所以,解决方案是做这样的事情:
var json = JsonConvert.SerializeObject(data);
var content = new StringContent(json, Encoding.UTF8, "application/json");
var response = await _httpClient.PostAsync(url, content, cancellationToken);