Windows 11环境下System.Net.Http.StringContent是否存在Bug?
我有一段基于.NET 6的代码,在Windows 10/Windows Server 2019虚拟机+Visual Studio 17.4.2环境中稳定运行多年。近期搭建Windows 11虚拟机并安装同版本Visual Studio后,代码编译正常,但运行时创建StringContent出现异常:无错误抛出,但调试可见StringContent仅包含头信息,无内容字节数组。两台机器的System.Net.Http.dll版本完全一致:
- 程序集名称:System.Net.Http
- 程序集版本:6.0.0.0
- 文件版本:6.0.1122.52304
- 路径:
C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\6.0.11\ref\net6.0\System.Net.Http.dll
相关代码片段:
var requestUriWithQuery = string.Concat(requestUri, "?", query); var httpContent = new StringContent(JsonConvert.SerializeObject(content), Encoding.UTF8, "application/json"); var requestMessage = new HttpRequestMessage(HttpMethod.Post, requestUriWithQuery); requestMessage.Content = httpContent;
调试对比:
- Windows Server 2019虚拟机:
StringContent包含正常的内容字节数组 - Windows 11虚拟机:
StringContent仅显示头信息,无内容字节数组
排查方向
验证序列化结果有效性
直接输出JsonConvert.SerializeObject(content)的字符串结果,确认Windows 11环境下是否生成了有效JSON。有可能是content对象在新环境中因序列化配置、属性访问权限等问题,导致序列化后为空字符串。确认实际运行时版本
虽然引用的程序集版本一致,但实际运行时可能存在差异。在代码中添加以下输出,检查运行时细节:Console.WriteLine(System.Environment.Version.ToString()); Console.WriteLine(System.Runtime.InteropServices.RuntimeInformation.FrameworkDescription);确保Windows 11虚拟机安装了正确的.NET 6.0.11运行时,避免自动更新导致版本不一致。
排查调试器显示bug
有时调试器的可视化视图会出现异常,并非实际内容为空。可以通过以下代码验证StringContent的真实内容:var contentStr = await httpContent.ReadAsStringAsync(); Console.WriteLine(contentStr);如果输出正常,说明是调试器显示问题,不影响实际请求;如果输出为空,再聚焦序列化或
StringContent构造逻辑排查。检查Visual Studio调试配置
确认Windows 11环境下的项目是否启用了"优化代码"选项,该选项可能导致调试时无法正确显示对象内容。可以关闭项目属性中的"优化代码",重新编译调试。清理重建项目
删除项目的bin、obj目录,清理NuGet缓存后重新编译,避免缓存文件损坏引发异常。核对.NET环境配置
检查Windows 11虚拟机的DOTNET_ROOT环境变量是否指向正确的.NET 6 SDK路径,防止项目意外调用其他版本的运行时。
内容的提问来源于stack exchange,提问作者user3051378

