.net 核心请求列表参数始终为空

Posted

技术标签:

【中文标题】.net 核心请求列表参数始终为空【英文标题】:.net core request list parameter always gets null 【发布时间】:2022-01-11 02:06:03 【问题描述】:

我正在尝试将 http post 请求中的对象列表发送到 .net 核心应用程序,但我在控制器中的列表始终为空。 当我使用 JsonConvert 解析代码中的 json 时,它运行完美。 我找不到为什么它不能正确绑定到模型。

我的行动: public async Task<ActionResult> FileTypes([FromBody] FileTypesRequest data)

文件类型请求:

public class FileTypesRequest
   
       public List<FileTypeChoice> FileTypes;
   

文件类型选择:

public class FileTypeChoice
    
        public string Content  get; set; 
        public string Type  get; set; 
    

邮递员请求正文:


    "fileTypes": [
        
            "content": "test",
            "type": "excel"
        ,
        
            "content": "test2",
            "type": "excel"
        
    ]

有什么帮助吗? 谢谢!

【问题讨论】:

请告诉我们正在向服务器发出的确切请求。 POST /FileTypes HTTP/1.1 主机:localhost:1000 内容类型:应用程序/json 内容长度:199 "fileTypes": [ "content": "test", "type": "excel" , "content": "test2", "type": "excel" ] @OrelEraki 似乎是案例问题。您在 Pascal 案例中拥有您的财产,而您在骆驼案例中传递的数据。 @शेखर .NET 默认情况下已从 camelCase 反序列化为 PascalCase 多年。所以这不太可能是一个案例问题,除非发布者在不知不觉中配置了一些非默认行为。 @Noah 是的,你是对的。似乎还有其他问题。 【参考方案1】:

好的,我找到了解决方案

public class FileTypesRequest

   public List<FileTypeChoice> FileTypes;

public class FileTypesRequest
 
   public List<FileTypeChoice> FileTypes  get; set; 

将文件类型从变量变为属性。

【讨论】:

【参考方案2】:

不是只是试图帮助诊断的答案

启用 HttpLogging 在 Startup.cs 文件中使用 AddHttpLoggingUseHttpLogging 方法。

您应该能够在控制台日志中看到请求正文。

大多数情况下,当大小写不匹配时,这些值为 null。当您将控制器添加到服务时,将 Json 配置为匹配大小写。 (骆驼或成员套管)

services.AddControllers()
    .AddJsonOptions(options =>
    
        // ...
    );

【讨论】:

这是一些合理的诊断建议。但这不是答案……

以上是关于.net 核心请求列表参数始终为空的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET WebApi HttpPost 参数始终为空

HttpServletRequest 参数映射始终为空 [关闭]

使用 Asp.Net Core Web API 文件上传文件始终为空

Asp.net 核心导航属性始终为空

WCF Rest 服务请求对象的字段始终为空

当我发出 http put 请求时,内容始终为空