asp.net-core - 使用 $select 或 $filter 时 OData 默认为帕斯卡大小写
问题描述
在我的 .net core 3.1 web api 项目中,我使用Microsoft.AspnetCore.Odata
和Microsoft.AspnetCore.Mvc.NewtonsoftJson
. 我的启动看起来像这样:
services.AddOData();
services.AddControllers(options =>
{
IEnumerable<ODataOutputFormatter> outputFormatters =
options.OutputFormatters.OfType<ODataOutputFormatter>()
.Where(foramtter => foramtter.SupportedMediaTypes.Count == 0);
foreach (var outputFormatter in outputFormatters)
{
outputFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("application/odata"));
}
}).AddNewtonsoftJson(options =>
{
options.UseCamelCasing(false);
options.SerializerSettings.ContractResolver = new DefaultContractResolver() { NamingStrategy = new CamelCaseNamingStrategy() };
});
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseEndpoints(endpoints =>
{
endpoints.MapHealthChecks("/health");
endpoints.MapControllers().RequireAuthorization();
endpoints.EnableDependencyInjection();
endpoints.Select().OrderBy().Filter();
endpoints.MapODataRoute("odata", "odata", GetEdmModel());
});
}
IEdmModel GetEdmModel()
{
var builder = new ODataConventionModelBuilder();
builder.EnableLowerCamelCase();
builder.EntitySet<Ebp>("Ebp");
return builder.GetEdmModel();
}
当我使用 调用GET
端点{{baseUrl}}/odata/coaching/ebp/all
时,结果camelCase
如我所料。
但是,当我引入任何$select
或$filter
选项进行查询时,我的响应更改为PascalCase
为什么会这样?
解决方案
答案就在这篇文章中。在AddNewtonSoftJson
附加到服务集合的方法中,我应该SerializerSettings.ContractResolver
将CamelCasePropertyNamesContractResolver
.
services.AddOData();
services.AddControllers(options =>
{
IEnumerable<ODataOutputFormatter> outputFormatters =
options.OutputFormatters.OfType<ODataOutputFormatter>()
.Where(foramtter => foramtter.SupportedMediaTypes.Count == 0);
foreach (var outputFormatter in outputFormatters)
{
outputFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("application/odata"));
}
}).AddNewtonsoftJson(options =>
{
options.UseCamelCasing(false);
options.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
});
推荐阅读
- javascript - Typescript NPM 包子模块
- json - 使用 aws-cli 时如何在 Powershell 中正确格式化 JSON?
- reactjs - 如何立即更新状态变量
- google-maps - 动态设置谷歌地图缩放级别以显示最小/最大 POI 数量
- c# - 如何获取无边框全屏 wpf/uwp 窗口的 dwp 缩略图
- git - 我可以保留提交但删除所有更改吗?
- angular - Angular rxjs:达到错误后保持订阅
- python - Python - 垃圾收集非常慢,无法禁用 gc
- python - 如何修复在heroku上不断超时的机器学习烧瓶应用程序?
- vba - 跟踪另一个来源对表所做的更改