从.net核心web api控制器中的请求体捕获复杂类型json

bvhaajcl  于 2021-06-04  发布在  Kafka
关注(0)|答案(1)|浏览(462)

我有以下在控制器,它漂亮地捕捉到 ProducerConfig 来自querystring的设置

[HttpPost("mylink/load/")]
        public async Task<IActionResult> PostMessageAsync(CancellationToken cancellationToken, [FromQuery] ProducerConfig producerConfigs)

但是,如果我决定更改以从请求体捕获参数,而不是从querystring捕获参数,我就不能这样做。

public async Task<IActionResult> PostMessageAsync(CancellationToken cancellationToken, [FromBody] ProducerConfig producerConfigs)

我向 Postman 提出了一个请求,请求的主体如下:

{    
    "LingerMs" : 420,
    "BatchNumMessages" : 5,
    "CompressionLevel" : 2,
    "CompressionType" : 1
}

请求失败。
响应

{"type":"https://tools.ietf.org/html/rfc7231#section-6.5.1","title":"One or more validation errors occurred.","status":400,"traceId":"|246f628d-4624827bfa8633b1.","errors":{"$":["The JSON value could not be converted to Confluent.Kafka.ProducerConfig. Path: $ | LineNumber: 0 | BytePositionInLine: 1."]}}
gcmastyq

gcmastyq1#

更新23/07
{“类型”:https://tools.ietf.org/html/rfc7231#section-6.5.1“,”title“:”出现一个或多个验证错误“,”status“:400,“traceid”:“| 246f628d-4624827bfa8633b1”,“errors”:{“$”:[“JSON值无法转换为confluent.kafka.producerconfig。路径:$|行号:0 | BytePositionLine:1。“]}}
我以前遇到过这种情况。你可以试着安装 Newtonsoft.JSON 包裹。

Install Microsoft.AspNetCore.Mvc.NewtonsoftJson package.

在startup.cs中添加

services.AddControllers().AddNewtonsoftJson();

添加 [HttpPost] 如果使用 [FromBody]Get 不发送表单的正文,它只请求 URL . 使用 <form> 并将其发布到您的控制器方法中,该方法需要使用 HttpPost .

控制器代码

[HttpPost("mylink/load/")]
        public IActionResult PostMessageAsync(CancellationToken cancellationToken, [FromBody] ProducerConfig producerConfigs) 
        {
            return Json(producerConfigs);
        }

调试截图

Postman 截图

相关问题