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

.NET Core Web API控制器接收特殊字符丢失问题(C#)

.NET Core Web API 正确接收特殊字符的解决方案

问题场景

我在业务中需要处理特殊字符,向.NET Core Web API发送的请求负载如下:

{sortBy: "title", isSortAscending: false, page: 1, pageSize: 5, quickSearch: "Magič"}

传入的quickSearch值为"Magič",但调用api/GetProducts端点后,服务端接收该属性时显示异常。尝试在startup.cs中配置波斯尼亚相关文化信息(bs-Latn-BA、bs),但均未生效。


解决方法

1. 确保客户端请求使用UTF-8编码

客户端发送请求时,必须明确指定请求头Content-Type: application/json; charset=utf-8,避免因编码缺失导致特殊字符损坏。

  • 代码示例(HttpClient):
    var client = new HttpClient();
    client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
    // 明确指定UTF-8编码构造请求内容
    var content = new StringContent(jsonPayload, Encoding.UTF8, "application/json");
    var response = await client.PostAsync("api/GetProducts", content);
    
  • Postman测试时,在Headers面板手动添加该请求头。

2. 配置API的JSON序列化编码

在Program.cs(.NET 6+)或Startup.cs(.NET Core 3.x及更早)中,配置JSON序列化器支持全Unicode字符:

// .NET 6+ Program.cs
var builder = WebApplication.CreateBuilder(args);

builder.Services.AddControllers()
    .AddJsonOptions(options =>
    {
        // 启用全Unicode字符支持
        options.JsonSerializerOptions.Encoder = System.Text.Encodings.Web.JavaScriptEncoder.Create(System.Text.Unicode.UnicodeRanges.All);
    });

3. 正确配置请求本地化中间件

之前仅设置线程文化未生效,是因为缺少请求本地化中间件的配置。添加以下代码:

// .NET 6+ Program.cs
builder.Services.Configure<RequestLocalizationOptions>(options =>
{
    var supportedCultures = new[] { new CultureInfo("bs-Latn-BA") };
    options.DefaultRequestCulture = new RequestCulture("bs-Latn-BA");
    options.SupportedCultures = supportedCultures;
    options.SupportedUICultures = supportedCultures;
});

// 在中间件管道中启用本地化
var app = builder.Build();
app.UseRequestLocalization();

4. 验证服务端接收编码

在控制器方法中添加编码验证,排查问题环节:

[HttpPost("GetProducts")]
public IActionResult GetProducts([FromBody] ProductRequest request)
{
    // 将接收的字符串转为UTF-8十六进制,验证"č"是否为C4 8D
    var bytes = Encoding.UTF8.GetBytes(request.quickSearch);
    var hex = BitConverter.ToString(bytes);
    return Ok(new { ReceivedValue = request.quickSearch, Utf8Hex = hex });
}

内容的提问来源于stack exchange,提问作者Roxy'Pro

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 22:10:24