Change JSON response to Pascal case using web API custom attribute(使用Web API自定义属性将JSON响应更改为Pascal大小写)
本文介绍了使用Web API自定义属性将JSON响应更改为Pascal大小写的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
将mvc核心webApi的json响应从"camelcase"转换为"pascalcase"的我的自定义操作过滤属性不起作用。
已尝试使用:
services.AddMvc()
.AddJsonOptions(options =>
options.SerializerSettings.ContractResolver = new DefaultContractResolver());
但是,这种全局设置会更改对Pascal大小写的所有响应。我只想将有限的API响应更改为Pascal大小写。
自定义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"}]
推荐答案
差不多了:您需要覆盖OnActionExecuted()
方法,而不是OnResultExecuted()
。
调用OnResultExecuted()
过滤方法时更改格式化程序为时已晚。
修复方法:
重写OnResultExecuted
方法,以便在执行结果之前更改格式化程序:
public override void OnResultExecuted(ResultExecutedContext context)public override void OnActionExecuted(ActionExecutedContext context) { ... }
作为附注,您没有检查类型
JsonResult
。要使其与Json()
或JsonResult()
一起工作,您需要动态检查结果类型:
public class CancelCamelCaseResolverConfigurationAttribute : ActionFilterAttribute
{
public override void OnActionExecuted(ActionExecutedContext context)
{
base.OnActionExecuted(context);
switch(context.Result){
case JsonResult j:
var result = new ObjectResult(j.Value);
context.Result = result;
ChangeFormatting(result);
break;
case ObjectResult o:
ChangeFormatting(o);
break;
default:
return;
}
}
private void ChangeFormatting(ObjectResult result){
if (result == null){ return; }
result.Formatters.Clear();
result.Formatters.Add(new JsonOutputFormatter(
new JsonSerializerSettings()
{
Formatting = Formatting.None,
ContractResolver = new DefaultContractResolver()
}, ArrayPool<char>.Shared)
);
}
}
这篇关于使用Web API自定义属性将JSON响应更改为Pascal大小写的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:使用Web API自定义属性将JSON响应更改为Pascal大小写


猜你喜欢
- 良好实践:如何重用 .csproj 和 .sln 文件来为 CI 创建 2022-01-01
- WebMatrix WebSecurity PasswordSalt 2022-01-01
- 带有服务/守护程序应用程序的 Microsoft Graph CSharp SDK 和 OneDrive for Business - 配额方面返回 null 2022-01-01
- C# 中多线程网络服务器的模式 2022-01-01
- 在哪里可以找到使用中的C#/XML文档注释的好例子? 2022-01-01
- MoreLinq maxBy vs LINQ max + where 2022-01-01
- C#MongoDB使用Builders查找派生对象 2022-09-04
- 如何用自己压缩一个 IEnumerable 2022-01-01
- Web Api 中的 Swagger .netcore 3.1,使用 swagger UI 设置日期时间格式 2022-01-01
- 输入按键事件处理程序 2022-01-01