【发布时间】:2020-02-03 19:25:46
【问题描述】:
用于将 MVC 核心 webApi 的 JSON 响应从“camelCase”转换为“pascalCase”的自定义操作过滤器属性不起作用。
尝试使用:
services.AddMvc()
.AddJsonOptions(options =>
options.SerializerSettings.ContractResolver = new DefaultContractResolver());
但是,这种全局设置会改变所有对 Pascal 情况的响应。我只想更改对 Pascal 案例的有限 API 响应。
自定义ActionFilterAttribute:
public class CancelCamelCaseResolverConfigurationAttribute : ActionFilterAttribute
{
public override void OnResultExecuted(ResultExecutedContext context)
{
base.OnResultExecuted(context);
var objectResult = context.Result as ObjectResult;
if (objectResult != null)
{
objectResult.Formatters.Clear();
objectResult.Formatters.Add(new JsonOutputFormatter(
new JsonSerializerSettings()
{
Formatting = Formatting.None,
ContractResolver = new DefaultContractResolver()
}, ArrayPool<char>.Shared));
}
}
}
并在 webApi 控制器中使用:
[CancelCamelCaseResolverConfiguration]
public class FrmMainSearchController : AtlasApiController<FrmMainSearchController>
{
/*Api*/
}
预期结果:
searchCriteria = [{Key: "xx", Value: "yy"}]
实际结果:
searchCriteria = [{key: "xx", value: "yy"}]
【问题讨论】:
标签: c# asp.net-core-webapi actionfilterattribute