You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.01 02:42:45