提问人:Ilya Chernomordik 提问时间:10/25/2023 最后编辑:marc_sIlya Chernomordik 更新时间:10/25/2023 访问量:28
当未指定类型鉴别器时,如何在 ASP.NET Core中获取多态反序列化的正确错误消息?
How to get a proper error message in ASP.NET Core for a polymorphic deserialization when type discriminator is not specified?
问:
我想在请求中获取多态类数组:
{
"notifications": [{"type":"Sms", ...}, {"type":"Email", ...} ]
}
为此,我有以下代码:
[JsonPolymorphic(TypeDiscriminatorPropertyName = "type")]
[JsonDerivedType(typeof(EmailNotificationWeb), "Email")]
[JsonDerivedType(typeof(SmsNotificationWeb), "Sms")]
public abstract record NotificationWeb;
public record EmailNotificationWeb : NotificationWeb
{
public required string Subject { get; init; }
public required string Body { get; init; }
}
public record SmsNotificationWeb : NotificationWeb
{
public required string Message { get; init; }
}
当我发送包含“type”的数组元素时,这有效,即使“type”是错误的,我也会收到一个错误,指出类型未知。
但是,如果我根本不发送类型鉴别器,则请求在尝试创建抽象类时会严重失败。有没有办法得到一个好的信息,比如鉴别器是无效的(同样是说“type”: “unknown”,没有类型)。
答:
0赞
Ilya Chernomordik
10/25/2023
#1
我发现这个小解决方法有效,但我宁愿理想情况下在 Asp.Net Core 中拥有一些开箱即用的东西,因为这实际上意味着我必须为每个基类编写它。
public record NotificationWeb : IValidatableObject
{
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
if (GetType() == typeof(NotificationWeb))
{
yield return new ValidationResult("Type should be specified");
}
}
}
评论