【问题标题】:Handling empty subclasses in API calls in ASP.NET Core with .NET 6使用 .NET 6 在 ASP.NET Core 中处理 API 调用中的空子类
【发布时间】:2021-12-25 17:36:59
【问题描述】:

我刚刚使用 .NET 6 将我的后端 API 升级到 ASP.NET Core,如果 POST 调用包含一个空的子类,则开始出现错误。

这是一个例子。我的 API 收到 POST 对评论条目的调用,处理这些调用的类如下所示:

public class CommentEntry
{
   [Required]
   public string Comments { get; set; }

   public DateTime EntryDate { get; set; }

   public File Attachment { get; set; }
}

如您所见,该类有一个File 子类用于附件。 File 类如下所示:

public class File
{
   public Guid Id { get; set; }

   public string Name { get; set; }

   public string Url { get; set; }
}

当我的 API 使用 .NET 5 运行 ASP.NET Core 时,我可以发送一个 POST 请求,如下所示,它为 attachment 属性发送一个空对象,它可以正常工作:

{
   "comments": "Hello World!",
   "entryDate: "2021-11-13T14:52",
   "attachment": {}
}

现在,由于!ModelState.IsValid 行,我的控制器操作方法正在拒绝此操作。

如果我将 POST 请求更改为以下内容,那么它也可以在 .NET 6 中使用。

{
   "comments": "Hello World!",
   "entryDate: "2021-11-13T14:52",
   "attachment: {
      "id": "00000000-0000-0000-0000-000000000000",
      "name": "",
      "url": ""
   }

}

正如您在CommentEntry 类中所见,附件不是必需的。

在我没有子类数据的情况下,处理这种情况的正确方法是什么?我不应该在我的POST 调用中发送一个空对象吗?

【问题讨论】:

    标签: c# asp.net asp.net-core asp.net-web-api .net-6.0


    【解决方案1】:

    似乎属性绑定不喜欢“空”对象。我的猜测是它会尝试将属性设置为 null。但是,在将内容设置为 null 时,.net 6 的策略比旧框架更严格。

    当您专门将属性类型设置为可为空时,.net 6 知道您是故意这样做的。简而言之,您应该这样做:

    public File? Attachment { get; set; }
    

    所以asp.net核心知道null没问题。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-11
    • 1970-01-01
    • 2018-05-31
    • 1970-01-01
    • 2018-07-31
    • 2020-07-07
    • 2019-10-03
    相关资源
    最近更新 更多