WebAPI响应转义字符移除咨询——翻译接口返回\n转义问题处理
解决ASP.NET Core接口返回内容中多余转义字符的问题
这个问题我之前也碰到过——默认的System.Text.Json序列化器会自动转义字符串里的特殊字符(比如\n变成\\n),这是它的默认安全行为,但对于存储在数据库里的合法换行符来说,我们确实不需要这个转义。下面给你两种可行的解决方案:
方案一:全局修改JSON序列化配置(适用于整个项目)
如果你的项目中多个接口都需要保留原始的换行符等特殊字符,可以在Program.cs里全局配置Json序列化选项,关闭不必要的转义:
builder.Services.AddControllers() .AddJsonOptions(options => { // 使用UnsafeRelaxedJsonEscaping允许保留换行符、制表符等字符,不进行转义 options.JsonSerializerOptions.Encoder = System.Text.Encodings.Web.JavaScriptEncoder.UnsafeRelaxedJsonEscaping; });
⚠️ 注意:这个配置会放宽JSON的转义规则,只适合处理你信任的内容(比如自己数据库里的翻译文本)。如果接口会返回用户输入的内容,要谨慎使用,避免潜在的XSS风险。
方案二:仅针对当前接口配置(更灵活)
如果你不想修改全局配置,只想让这个翻译接口返回原始的换行符,可以把返回类型改成IActionResult,手动指定该接口的序列化选项:
[HttpGet("/api/getpublictranslations")] public async Task<IActionResult> Getpublictranslations([FromQuery(Name = "locale")] string locale) { try { var translations = await _translationBusiness.GetPublicTranslation(locale); // 手动创建JsonResult并指定序列化选项 return new JsonResult(translations, new JsonSerializerOptions { Encoder = System.Text.Encodings.Web.JavaScriptEncoder.UnsafeRelaxedJsonEscaping }); } catch (Exception ex) { _logger.LogError(ex.Message, ex); throw; } }
额外说明(如果你用的是Newtonsoft.Json)
如果你的项目用的是Json.NET(Newtonsoft.Json)而非默认的System.Text.Json,调整方式略有不同:
全局配置:
builder.Services.AddControllers() .AddNewtonsoftJson(options => { // 设置StringEscapeHandling来控制转义行为,这里选择只转义非ASCII字符,保留换行符 options.SerializerSettings.StringEscapeHandling = Newtonsoft.Json.StringEscapeHandling.EscapeNonAscii; });
这样配置后,数据库里的\n就会直接以\n的形式返回,不会被转义成\\n了。
内容的提问来源于stack exchange,提问作者user1428798
相关产品推荐
相关产品推荐

