asp.net-core-webapi - 有没有办法在每个 HTTP 请求的 JSON 响应中重置 $id?JsonSerializerSettings = PreserveReferencesHandling.Objects
问题描述
XYZController.cs
[HttpPost]
public async Task<ActionResult> Post([FromBody] T inputContext)
{
var outputContext = Process(inputContext);
return StatusCode(200, outputContext );
}
启动.cs
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc().AddJsonOptions(options =>
{
UpdateJsonSettings.ConfigureJsonFormatter(options.SerializerSettings);
});
}
更新JsonSettings.cs
internal static void ConfigureJsonFormatter(JsonSerializerSettings settings)
{
settings.ContractResolver = new CamelCasePropertyNamesContractResolver();
settings.PreserveReferencesHandling = PreserveReferencesHandling.Objects;
settings.Converters.Add(new StringEnumConverter());
}
XYZ 控制器的 HttpResponse 尝试 1:
{ "$id": "1", "bill": { "$id": "2", "type": "TYPE1",
XYZ 控制器尝试 2 的 HttpResponse:- 不以 $id 1 开头
{ "$id": "28", <--- 不知道为什么第二个请求 $ID 以 28 开头 :( --> "bill": { "$id": "29" , "type": "类型 1",
XYZ 控制器尝试 3 的 HttpResponse:- 不以 $id 1 开头
{ "$id": "55", <--- 不知道为什么第二个请求 $ID 以 55 开头 :( --> "bill": { "$id": "56" , "type": "类型 1",
我正在使用 Newtonsoft.Json (11.0.2)
解决方案
我经过惨痛的教训才学到这个!
问题出在 StatusCode 方法中,它正在返回 ObjectResult。将方法签名更改为 IActionResult 并返回 JsonResult 后,它工作正常。此外,API 性能也得到了改进。
[HttpPost]
public async Task<IActionResult> Post([FromBody] T inputContext)
{
var outputContext = Process(inputContext);
var jsonResult = new JsonResult(outputContext);
jsonResult.StatusCode = 200;
return jsonResult;
}
推荐阅读
- mysql - 使用 MySql 将列中的数字替换为相应的字符串
- deep-learning - GPU需要多少?
- sql - 如何在SQL中的另一个表中的两个数字之间找到表中的一个数字
- pandas - TypeError:无法从 ndarray 中减去 DatetimeArray
- javascript - 在第二页上通过 puppeteer 运行灯塔时浏览器实例被杀死
- amazon-web-services - AWS Amplify 多对多 - 删除不起作用
- c - 我怎样才能使数据按字母顺序打印在列表中?
- python - 在不知道其维度的情况下对数组进行切片
- javascript - 如何将反应多边形元素转换为 google.maps.Polygon 元素
- c++ - 将非类型模板参数放入元组