.NET 9 Minimal API如何全局配置Query参数与OpenAPI驼峰命名?
全局配置查询字符串参数为驼峰命名
在ASP.NET Core中,无需逐个给属性添加[FromQuery(Name = "...")]特性,通过以下全局配置即可让所有查询参数自动使用驼峰命名:
方式一:基于内置命名策略配置
在Program.cs(ASP.NET Core 6+)或Startup.cs的ConfigureServices方法中添加配置:
使用System.Text.Json的项目
builder.Services.AddControllers(options => { // 绑定查询参数时应用驼峰命名策略 options.ModelMetadataDetailsProviders.Add(new SystemTextJsonValidationMetadataProvider()); }) .AddJsonOptions(options => { // 可选:保证JSON序列化也使用驼峰,和查询参数命名统一 options.JsonSerializerOptions.PropertyNamingPolicy = System.Text.Json.JsonNamingPolicy.CamelCase; });
使用Newtonsoft.Json(Json.NET)的项目
builder.Services.AddControllers() .AddNewtonsoftJson(options => { options.SerializerSettings.ContractResolver = new Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver(); }) .AddMvcOptions(options => { options.ModelMetadataDetailsProviders.Add(new NewtonsoftJsonValidationMetadataProvider()); });
方式二:自定义元数据提供器(灵活扩展场景)
如果需要更精细的控制,可以自定义元数据提供器覆盖查询参数命名规则:
public class CamelCaseQueryMetadataProvider : IDisplayMetadataProvider { public void CreateDisplayMetadata(DisplayMetadataProviderContext context) { if (context.Key.MetadataKind == ModelMetadataKind.Property) { // 将属性名转换为驼峰格式作为查询参数名 var camelCaseName = System.Text.Json.JsonNamingPolicy.CamelCase.ConvertName(context.Key.Name); context.DisplayMetadata.PropertyName = camelCaseName; } } } // 在Program.cs/Startup.cs中注册 builder.Services.AddControllers(options => { options.ModelMetadataDetailsProviders.Add(new CamelCaseQueryMetadataProvider()); });
配置完成后,你的参数类可以完全移除[FromQuery]特性,自动生成驼峰命名的查询参数:
public class UsageQueryParams { public ContractType? ContractType { get; set; } public long? Limit { get; set; } }
此时OpenAPI规范中对应的查询参数会自动显示为contractType和limit,同时模型绑定也能正常识别驼峰格式的请求参数。
内容的提问来源于stack exchange,提问作者Bruno Casarotti
相关产品推荐
相关产品推荐

