WebAPI返回TOML内容被转义包裹,HttpClient读取异常求助
问题原因与解决方法
原因分析
你遇到的问题核心在于ASP.NET Core对Ok(string)的默认处理逻辑:当返回Ok(string)时,框架会把这个字符串当作JSON的字符串值进行序列化——给字符串整体套上双引号,同时转义内部的特殊字符(比如双引号、换行符)。
Swagger/Postman显示正常是因为它们会自动解析响应的JSON格式,把序列化后的字符串值提取出来展示,相当于帮你做了解转义和去引号的操作;而HttpClient.ReadAsStringAsync()读取的是响应的原始内容,也就是完整的JSON字符串,所以会看到带引号和转义符的结果。
正确解决方案
不要用Ok(string)返回,而是直接返回纯文本格式的响应,指定正确的内容类型(TOML的标准MIME类型是application/toml,也可以用text/plain)。示例代码如下:
[HttpGet] [Produces("application/toml")] public IActionResult GetTomlConfig() { // 你的TOML内容生成逻辑 var tomlContent = @"[systems.""test 2""] name = ""testname"" organisation = ""testorg"""; // 用Content返回纯文本,指定内容类型 return Content(tomlContent, "application/toml"); }
这样修改后,HttpClient.GetAsync()再调用ReadAsStringAsync()就能直接拿到原始的TOML字符串,不需要额外处理转义或引号。
内容的提问来源于stack exchange,提问作者Birdalicious
相关产品推荐
相关产品推荐

