本文介绍了有没有一种方法可以为每个HTTP请求在JSON响应中重置$ id? JsonSerializerSettings = PreserveReferencesHandling.Objects的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

XYZController.cs

XYZController.cs

[HttpPost]
public async Task<ActionResult> Post([FromBody] T inputContext)
{
       var outputContext = Process(inputContext);
       return StatusCode(200, outputContext );
}

Startup.cs

Startup.cs

public void ConfigureServices(IServiceCollection services)
{
     services.AddMvc().AddJsonOptions(options =>
            {
                UpdateJsonSettings.ConfigureJsonFormatter(options.SerializerSettings);
            });
}

UpdateJsonSettings.cs

UpdateJsonSettings.cs

internal static void ConfigureJsonFormatter(JsonSerializerSettings settings)
{
       settings.ContractResolver = new CamelCasePropertyNamesContractResolver();
       settings.PreserveReferencesHandling = PreserveReferencesHandling.Objects;
       settings.Converters.Add(new StringEnumConverter());
}

用于XYZ控制器的HttpResponse尝试1:

HttpResponse for XYZ Controller Try 1:

{ "$ id":"1", 账单": { "$ id":"2", "type":"TYPE1",

{ "$id": "1", "bill": { "$id": "2", "type": "TYPE1",

用于XYZ控制器的HttpResponse尝试2:-不以$ id 1开头

HttpResponse for XYZ Controller Try 2: -- does not start with $id 1

{ "$ id":"28",< ---不确定为什么在第二个请求中$ ID以28开头:(--> 账单": { "$ id":"29" , "type":"TYPE1",

{ "$id": "28", <--- NOT SURE WHY ON THE SECOND REQUEST $ID starts with 28 :( --> "bill": { "$id": "29", "type": "TYPE1",

用于XYZ控制器的HttpResponse尝试3:-不以$ id 1开头

HttpResponse for XYZ Controller Try 3: -- does not start with $id 1

{ "$ id":"55",< ---不确定为什么在第二个请求中$ ID以55开头:(--> 账单": { "$ id":"56" , "type":"TYPE1",

{ "$id": "55", <--- NOT SURE WHY ON THE SECOND REQUEST $ID starts with 55 :( --> "bill": { "$id": "56", "type": "TYPE1",

我正在使用Newtonsoft.Json(11.0.2)

I am using Newtonsoft.Json (11.0.2)

推荐答案

我很难学到这一点!

问题在StatusCode方法中,它正在返回ObjectResult.将方法签名更改为IActionResult并返回JsonResult后,它可以正常工作.此外,API性能也得到了改善.

Issue was in StatusCode method, it was returning ObjectResult. After changing method signature to IActionResult and returning JsonResult, it is working fine. Also, API performance is improved.

[HttpPost]
public async Task<IActionResult> Post([FromBody] T inputContext)
{
       var outputContext = Process(inputContext);
       var jsonResult = new JsonResult(outputContext);
       jsonResult.StatusCode = 200;
       return jsonResult;
}

这篇关于有没有一种方法可以为每个HTTP请求在JSON响应中重置$ id? JsonSerializerSettings = PreserveReferencesHandling.Objects的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

11-02 17:35