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

.NET Core 6 Web API如何全局配置Json响应字符串HtmlEncode?

.NET Core 6 Web API 全局配置JSON字符串HTML编码方案

你可以通过自定义JSON转换器+全局注册的方式实现,无需重复编写编码代码,以下是具体实现方案:

方案一:使用System.Text.Json(默认序列化器)

1. 自定义HTML编码字符串转换器

创建继承自JsonConverter<string>的转换器类,在序列化时自动对字符串进行HTML编码:

using System.Text.Json;
using System.Text.Json.Serialization;
using System.Web;

public class HtmlEncodedStringConverter : JsonConverter<string>
{
    // 反序列化时可按需解码,若不需要可直接返回原始值
    public override string Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
    {
        var value = reader.GetString();
        return string.IsNullOrEmpty(value) ? value : HttpUtility.HtmlDecode(value);
    }

    // 序列化时对字符串进行HTML编码
    public override void Write(Utf8JsonWriter writer, string value, JsonSerializerOptions options)
    {
        var encodedValue = string.IsNullOrEmpty(value) ? value : HttpUtility.HtmlEncode(value);
        writer.WriteStringValue(encodedValue);
    }
}

2. 在Program.cs全局注册转换器

将自定义转换器添加到JSON序列化配置中,全局生效:

var builder = WebApplication.CreateBuilder(args);

// 配置控制器及JSON序列化选项
builder.Services.AddControllers()
    .AddJsonOptions(options =>
    {
        options.JsonSerializerOptions.Converters.Add(new HtmlEncodedStringConverter());
    });

var app = builder.Build();

// 中间件路由配置
app.MapControllers();

app.Run();

方案二:使用Newtonsoft.Json(Json.NET)

如果项目使用Newtonsoft.Json作为序列化器,可按以下方式配置:

1. 自定义HTML编码转换器

using Newtonsoft.Json;
using System.Web;

public class HtmlEncodedStringConverter : JsonConverter<string>
{
    public override string ReadJson(JsonReader reader, Type objectType, string existingValue, bool hasExistingValue, JsonSerializer serializer)
    {
        var value = reader.Value as string;
        return string.IsNullOrEmpty(value) ? value : HttpUtility.HtmlDecode(value);
    }

    public override void WriteJson(JsonWriter writer, string value, JsonSerializer serializer)
    {
        var encodedValue = string.IsNullOrEmpty(value) ? value : HttpUtility.HtmlEncode(value);
        writer.WriteValue(encodedValue);
    }
}

2. 全局注册转换器

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddControllers()
    .AddNewtonsoftJson(options =>
    {
        options.SerializerSettings.Converters.Add(new HtmlEncodedStringConverter());
    });

var app = builder.Build();

app.MapControllers();
app.Run();

局部生效(可选)

若不需要全局编码,可仅对特定类或属性启用编码,只需在目标类/属性上添加特性标记:

// 对单个属性生效
public class UserInfo
{
    [JsonConverter(typeof(HtmlEncodedStringConverter))]
    public string NickName { get; set; }
}

// 对整个类的所有字符串属性生效
[JsonConverter(typeof(HtmlEncodedStringConverter))]
public class Article
{
    public string Title { get; set; }
    public string Content { get; set; }
}

内容的提问来源于stack exchange,提问作者Jeeten Parmar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 19:40:57