问题描述
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的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!