Asp.net core webapi 有没有办法在JSON响应中为每个HTTP请求重置$id?JsonSerializerSettings=PreserveReferencesHandling.Objects
XYZController.csAsp.net core webapi 有没有办法在JSON响应中为每个HTTP请求重置$id?JsonSerializerSettings=PreserveReferencesHandling.Objects,asp.net-core-webapi,asp.net-core-2.1,Asp.net Core Webapi,Asp.net Core 2.1,XYZController.cs [HttpPost] public async Task<ActionResult> Post([FromBody] T inputContext) { var outputContext = Process(inputContext); return StatusCode(200, outputContext ); } UpdateJsonSettings.cs internal static void Configu
[HttpPost]
public async Task<ActionResult> Post([FromBody] T inputContext)
{
var outputContext = Process(inputContext);
return StatusCode(200, outputContext );
}
UpdateJsonSettings.cs
internal static void ConfigureJsonFormatter(JsonSerializerSettings settings)
{
settings.ContractResolver = new CamelCasePropertyNamesContractResolver();
settings.PreserveReferencesHandling = PreserveReferencesHandling.Objects;
settings.Converters.Add(new StringEnumConverter());
}
XYZ控制器的HttpResponse Try 1:
{
“$id”:“1”,
“法案”:{
“$id”:“2”,
“类型”:“类型1”
XYZ控制器Try 2的HttpResponse:--不以$id 1开头
{
“$id”:“28”
“法案”:{
“$id”:“29”,
“类型”:“类型1”
XYZ控制器Try 3的HttpResponse:--不以$id 1开头
{
“$id”:“55”
“法案”:{
“$id”:“56”,
“类型”:“类型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;
}
[HttpPost]
公共异步任务Post([FromBody]T inputContext)
{
var outputContext=进程(inputContext);
var jsonResult=新的jsonResult(outputContext);
jsonResult.StatusCode=200;
返回jsonResult;
}
我开了一个讨论会
基本上,StatusCode
缓存$id
值的问题在于
出于性能原因,NewtonsoftJsonOutputFormatter
选择缓存用于序列化对象的JsonSerializer
。这还将缓存及其内部计数器
正如我在Github一期中所说的,有一种方法可以通过自定义解决每个请求的问题。但是,由于解析器也缓存在单例/静态上下文中,因此解决每个请求的问题还有很长的路要走。您能说明如何获得响应(要复制的web api代码)?我添加了控制器信息。这无法使用提供的示例代码/json设置生成。
$id
在每个JsonConvert.Serialize
调用上为我重置。您需要提供更多信息,例如输入和输出模型是什么样子的?过程
方法大致做什么?我有另一个c仅返回运行状况检查的控制器。[HttpGet]公共异步任务GetHealth(){dynamic healthStatus=true;返回Ok(healthStatus);}}},该控制器还返回上次调用中引用的$id。[Route(“api/[controller]”]][ApiController]公共类HealthController:ControllerBase{}控制器注册签名
[HttpPost]
public async Task<IActionResult> Post([FromBody] T inputContext)
{
var outputContext = Process(inputContext);
var jsonResult = new JsonResult(outputContext);
jsonResult.StatusCode = 200;
return jsonResult;
}