使用 .NET 6 在 ASP.NET Core 中处理 API 调用中的空子类
Handling empty subclasses in API calls in ASP.NET Core with .NET 6
我刚刚将我的后端 API 升级到 ASP.NET Core with .NET 6,如果 POST
调用包含一个空的 subsclass,就会开始出现错误。
这是一个例子。我的 API 收到 POST
评论条目调用,处理这些调用的 class 如下所示:
public class CommentEntry
{
[Required]
public string Comments { get; set; }
public DateTime EntryDate { get; set; }
public File Attachment { get; set; }
}
如您所见,此 class 有一个 File
子 class 用于附件。 File
class 看起来像这样:
public class File
{
public Guid Id { get; set; }
public string Name { get; set; }
public string Url { get; set; }
}
当我的 API 是 运行 ASP.NET Core with .NET 5 时,我可以发送一个 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
class 中所见,不需要附件。
处理这种我没有子数据的情况的正确方法是什么class?我不应该在我的 POST
调用中发送一个空对象吗?
似乎 属性 绑定不喜欢 'empty' 对象。我的猜测是它会尝试将 属性 设置为 null。但是,在将内容设置为 null 时,.net 6 比旧框架有更严格的政策。
当您专门将 属性 类型设置为可为空时,.net 6 知道您是故意这样做的。总之你应该这样做:
public File? Attachment { get; set; }
所以asp.net核心知道null
没问题。
我刚刚将我的后端 API 升级到 ASP.NET Core with .NET 6,如果 POST
调用包含一个空的 subsclass,就会开始出现错误。
这是一个例子。我的 API 收到 POST
评论条目调用,处理这些调用的 class 如下所示:
public class CommentEntry
{
[Required]
public string Comments { get; set; }
public DateTime EntryDate { get; set; }
public File Attachment { get; set; }
}
如您所见,此 class 有一个 File
子 class 用于附件。 File
class 看起来像这样:
public class File
{
public Guid Id { get; set; }
public string Name { get; set; }
public string Url { get; set; }
}
当我的 API 是 运行 ASP.NET Core with .NET 5 时,我可以发送一个 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
class 中所见,不需要附件。
处理这种我没有子数据的情况的正确方法是什么class?我不应该在我的 POST
调用中发送一个空对象吗?
似乎 属性 绑定不喜欢 'empty' 对象。我的猜测是它会尝试将 属性 设置为 null。但是,在将内容设置为 null 时,.net 6 比旧框架有更严格的政策。
当您专门将 属性 类型设置为可为空时,.net 6 知道您是故意这样做的。总之你应该这样做:
public File? Attachment { get; set; }
所以asp.net核心知道null
没问题。