如何统一Blazor WASM与.NET Core API的字符串拼接结果?
解决Blazor WASM与.NET Core API字符串拼接一致性问题
核心原因
你看到的两端差异只是控制台/调试输出的显示格式不同,并非字符串本身的内容差异:
- 客户端的单引号是输出时的包裹符,实际字符串不含单引号;
- 服务器端的双引号和转义符(
\")是JSON序列化/输出时的自动转义,并非字符串原始内容的一部分。
验证实际内容是否一致
直接比较拼接后的字符串原始值,而非输出的格式化结果:
- 客户端:拼接后取
toHash.ToString(),调试时聚焦字符串本身的内容,不要被外层引号误导; - 服务器端:接收对象后完成同样的拼接操作,用
string.Equals(clientStr, serverStr)直接比较,确认内容是否真的不一致。
调整序列化配置保证内容一致
如果确实因JSON序列化/反序列化导致内容被修改,调整两端的JSON配置:
服务器端(.NET Core API)
在Program.cs中配置System.Text.Json,禁用不必要的HTML和引号转义:
builder.Services.AddControllers() .AddJsonOptions(options => { // 禁用严格的JSON转义,保留原始HTML字符和引号 options.JsonSerializerOptions.Encoder = System.Text.Encodings.Web.JavaScriptEncoder.UnsafeRelaxedJsonEscaping; // 可选:取消格式化输出,和客户端保持一致的紧凑格式 options.JsonSerializerOptions.WriteIndented = false; });
客户端(Blazor WASM)
如果客户端发送请求时的序列化导致内容变化,配置HttpClient的JSON选项:
builder.Services.AddScoped(sp => new HttpClient { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) }.ConfigureHttpClientJsonOptions(options => { options.JsonSerializerOptions.Encoder = System.Text.Encodings.Web.JavaScriptEncoder.UnsafeRelaxedJsonEscaping; }));
额外注意
不要通过输出的引号、转义符判断字符串一致性,这些都是工具的自动格式化行为。真正的字符串内容是去掉外层引号、还原转义符后的部分,比如两端的实际有效内容都是:
CLIA<p>Descriptions</p><p>Instructions</p>CA<p><strong>CLIA <a href="http://www.google.com">http://www.google.com</a> </strong></p>CLIA
内容的提问来源于stack exchange,提问作者americanslon
相关产品推荐
相关产品推荐

