除非我访问Request.InputStream

时间:2018-06-05 23:53:31

标签: c# asp.net

我正在使用ASP.NET版本5.2.3。当我使用版本为HTTP的其他POST应用程序执行ASP.NET Core 2.0.5时,API端点的NULL值为ViewModel即使有一个身体。当我使用来自CURLVSCode-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);

0 个答案:

没有答案