【发布时间】:2019-09-12 07:07:33
【问题描述】:
我目前正在将一个 API 从 ASP.NET Web API 迁移到 ASP.NET Core。我的旧 API 有一个端点接受列表作为正文的一部分:
public IHttpActionResult Post(MyModel model)
{
...
}
public class MyModel
{
public List<SomeObject> SomeObjects { get; set; }
}
我有一些该 API 的使用者能够发布以下 JSON:
POST /post
{
"someObjects": {}
}
当然,这应该是:
POST /post
{
"someObjects": []
}
但是 ASP.NET Web API 模型绑定接受了这个(我猜是设置 someObjects 到 null `)。
对 ASP.NET Core 执行相同操作时,将相同的 JSON 发布到 API 时出现以下错误:
Cannot deserialize the current JSON object (e.g. {\"name\":\"value\"}) into type 'System.Collections.Generic.List`1[SomeObject]'
再次,我完全理解为什么会出现错误。我需要向后兼容,所以有人可以帮忙吗?我想我需要一个自定义模型绑定器或其他东西来允许将空对象转换为 null 或空列表?
【问题讨论】:
-
不知道答案,但也许我可以为您指明设置自己的方向
JsonSerializerSettingsnewtonsoft.com/json/help/html/… -
我猜想将 someObjects 设置为 null` 这是当前的实际行为吗?
-
不,当前的行为是请求失败并出现我在问题中发布的错误。
-
我的意思是“遗留”行为;您的 ASPNET WebApi 上的属性是否设置为 null?
-
我不记得了。这里的问题不是 ASP.NET Web API。我只是想允许
{}作为List<SomeObject的有效值。如果是null或者 ASP.NET Core 中的空列表,我可以在新版本中处理。
标签: c# asp.net-core