【问题标题】:C# Receiving empty object in controllerC# 在控制器中接收空对象
【发布时间】:2023-02-03 10:55:11
【问题描述】:

我试图从 POST 控制器中的请求主体获取一些数据,但控制台显示空道具:

邮政控制器:

[HttpPost("{id}/features")]
public ActionResult<bool> AddFeatureAsync(Guid Id, [FromBody] AddRoleFeatureRequest request)
{
   Console.WriteLine(request.Name);
   Console.WriteLine(request.Description);
   Console.WriteLine(request.Id);

   return true;
}

AddRoleFeatureRequest 类:

public class AddRoleFeatureRequest
{
    public Guid Id;
    public string? Name;
    public string? Description;
}

来自 Postman 的 JSON 数据(使用 body raw 作为 Json):

{
    "name": "Feature ABC",
    "description": "description",
    "id": "7e12b0ad-2c82-46f0-a69e-8538efb0aa60"
}

我究竟做错了什么?

【问题讨论】:

  • 您的 Postman curl 命令语句是什么?
  • 你没有任何道具。我只看到字段:尝试添加{ get; set; }
  • 可以肯定的是,您是否在 Postman 中设置了 Content-Type: application/json 标头?

标签: c# asp.net-core


【解决方案1】:

您的“AddRoleFeatureRequest”类有大写字母,而您的 json 数据没有。这可能是您问题的根源。

【讨论】:

    【解决方案2】:

    您的属性名称不匹配。 请注意,json 属性区分大小写。

    您可以只添加 JsonProperty 属性来解决此问题:

    public class AddRoleFeatureRequest
    {
        [JsonProperty("id")]
        public Guid Id;
    
        [JsonProperty("name")]
        public string? Name;
    
        [JsonProperty("description")]
        public string? Description;
    }
    

    【讨论】:

      【解决方案3】:

      属性名称可能是原因,因为它们与 json 键不同,请在考虑字母大小写的同时重试,

      【讨论】:

        【解决方案4】:

        我正在尝试从 POST 中的请求正文中获取一些数据 控制器,但控制台显示空道具:

        您在控制台或控制器中获取空数据的原因非常明显,因为您只定义了 AddRoleFeatureRequest 类字段,不允许在其上设置任何值。例如,public string? Name; 是一个字段而不是属性。要设置值,您必须实施有效的设置器。因此,它可以被视为 valid property 并能够为其赋值。

        解决方案:

        public class AddRoleFeatureRequest
            {
                public Guid Id { get; set; }
                public string? Name { get; set; }
                public string? Description { get; set; }
            }
        

        笔记:Property without getter and setter 将始终视为字段,它不允许您从外部赋值。

        输出:

        笔记:修改您的类定义将完全解决您的问题。无需其他更改。

        【讨论】:

          猜你喜欢
          • 2014-01-05
          • 2017-09-19
          • 2014-03-02
          • 2014-10-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-11-08
          • 1970-01-01
          相关资源
          最近更新 更多