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

.NET 6 Minimal API:Results.OK为何忽略全局JSON命名策略?

问题描述

我正在使用Minimal API重构一个旧REST服务,需要尽可能复刻原服务的功能。原服务返回的数据采用Pascal case命名,且存在对大小写敏感的旧客户端。.NET 6 Web默认采用camel case序列化,但可通过以下代码覆盖该行为:

builder.Services.Configure<JsonOptions>(options =>
{
    options.JsonSerializerOptions.PropertyNamingPolicy = null;
});

设置断点后可见,该策略最初为camel case,随后被重置为null。使用JsonSerializer.Serialize时表现符合预期,但使用Results.Ok(collection)返回数据时又变回camel case,仿佛忽略了配置的选项。通过在模型类上声明特性设置属性名称可正常生效,但服务级配置无效。请问Results.Ok的响应管道采用的是哪套配置?


解决方案

Results.Ok(以及Minimal API中其他Results系列方法)使用的是**Microsoft.AspNetCore.Http.Json.JsonOptions**,而非你之前配置的通用System.Text.Json.JsonOptions,这就是服务级配置失效的核心原因。

要让Results.Ok输出Pascal case格式的数据,需要修改配置目标为HTTP响应专用的JsonOptions,代码如下:

builder.Services.Configure<Microsoft.AspNetCore.Http.Json.JsonOptions>(options =>
{
    options.SerializerOptions.PropertyNamingPolicy = null;
});

补充说明

Minimal API的Results方法是专为HTTP响应场景设计的,它依赖ASP.NET Core单独维护的HTTP序列化配置体系,这套配置和通用JsonOptions相互独立。将PropertyNamingPolicy设为null后,序列化逻辑会直接使用模型属性的原始名称(即Pascal case),与旧服务的输出格式完全匹配。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 00:05:20