是否有一种方法可以为每个HTTP请求在JSON响应中重置$ id? JsonSerializerSettings = PreserveReferencesHandling.Objects

问题描述 投票:0回答:1

XYZController.cs

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

Startup.cs

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

UpdateJsonSettings.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”,“帐单”:{“ $ id”:“ 2”,“ type”:“ TYPE1”,

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

{“ $ id”:“ 28”, “ $ id”:“ 29”,“ type”:“ TYPE1”,

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

{“ $ id”:“ 55”, “ $ id”:“ 56”,“ type”:“ TYPE1”,

我正在使用Newtonsoft.Json(11.0.2)

asp.net-core-webapi asp.net-core-2.1
1个回答
0
投票

我很难学到这一点!

问题在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;
}
© www.soinside.com 2019 - 2024. All rights reserved.