【问题标题】:Capture complex type JSON from Request Body in .net core web API controller从 .net 核心 Web API 控制器中的请求正文中捕获复杂类型 JSON
【发布时间】:2020-07-24 09:11:44
【问题描述】:

我在控制器中有以下内容,可以精美地捕获来自 QueryString 的 ProducerConfig 设置

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

但是,如果我决定更改为从请求正文而不是 QueryString 中捕获参数,我将无法做到。

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

我使用以下 JSON 正文向 Postman 发出请求:

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

并因 400 错误请求而失败。

回应

{"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."]}}

  

【问题讨论】:

  • 嗨,@Saher,你在使用 [FromBody] 时设置了 PostMessageAsync HttpPost 吗?
  • 这是一个帖子,所以我不确定它为什么会这样。我最终使用了另一个类并将属性转换为ProducerConfig
  • 我看不到你的 ProducerConfig 模型。从响应中,您应该检查您的属性类型或其在 Confluent.Kafka.ProducerConfig 中的验证。
  • 安装Newtonsoft.JSON包自动转换。

标签: asp.net-mvc asp.net-core asp.net-web-api apache-kafka confluent-platform


【解决方案1】:

23/07 更新

{"type":"https://tools.ietf.org/html/rfc7231#section-6.5.1","title":"一个 或更多验证错误 发生。","status":400,"traceId":"|246f628d-4624827bfa8633b1.","errors":{"$":[" 无法将 JSON 值转换为 Confluent.Kafka.ProducerConfig。 路径:$ |行号:0 | BytePositionInLine: 1."]}}

我以前遇到过这种情况。您可以尝试安装Newtonsoft.JSON 包。

Install Microsoft.AspNetCore.Mvc.NewtonsoftJson package.

在你的 startup.cs 添加

services.AddControllers().AddNewtonsoftJson();

如果使用[FromBody],请添加[HttpPost]

Get 不发送表单正文,它只请求URL。在您的视图中使用&lt;form&gt; 并将其发布到您的控制器方法中,该方法需要使用HttpPost 进行修饰。

控制器代码

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

调试截图

邮递员截图

【讨论】:

    猜你喜欢
    • 2014-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多