.NET 5.0 Web API 不适用于具有所需属性的记录

ser*_*ima 5 asp.net5 asp.net-core-webapi c#-9.0 c#-record-type

我使用 C# 9.0record类型作为 .NET 5.0 Web API 项目的绑定模型。某些属性是必需的。

我正在使用record位置语法,但收到错误。

public record Mail(
    System.Guid? Id,
    [property: Required]
    string From,
    [property: Required]
    string[] Tos,
    [property: Required]
    string Subject,
    string[]? Ccs,
    string[]? Bccs,
    [property: Required]
    Content[] Contents,
    Attachment[]? Attachments
);
Run Code Online (Sandbox Code Playgroud)

然后将其公开为我的Index操作的绑定模型:

public async Task<ActionResult> Index(Service.Models.Mail mailRequest)
{
    …
}
Run Code Online (Sandbox Code Playgroud)

但是,每当我尝试发出请求时,都会收到以下错误:

记录类型“Service.Models.Mail”在属性“Contents”上定义了将被忽略的验证元数据。“内容”是记录主构造函数中的一个参数,验证元数据必须与构造函数参数相关联。

我尝试删除该属性上的Contents属性,但是对于下一个(先前的)属性它失败了。我尝试使用[param: …]而不是[property: …],以及混合它们,但不断收到相同类型的错误。

我环顾了网络,并没有发现任何针对 C# 9 记录以不同方式处理注释的建议。我尽力了,但我没有想法——除了将我的记录转换为 POCO。

ser*_*ima 3

我放弃使用位置构造函数,并且通过属性的详细完整声明,它可以工作。

public record Mail
{
    public System.Guid? Id { get; init; }

    [Required]
    public string From { get; init; }

    [Required]
    public string[] Tos { get; init; }

    [Required]
    public string Subject { get; init; }

    public string[]? Ccs { get; init; }

    public string[]? Bccs { get; init; }

    [Required]
    public Content[] Contents { get; init; }

    public Attachment[]? Attachments { get; init; }

    public Status? Status { get; init; }

    public Mail(Guid? id, string @from, string[] tos, string subject, string[]? ccs, string[]? bccs, Content[] contents, Attachment[]? attachments, Status status)
    {
        Id = id;
        From = @from;
        Tos = tos;
        Subject = subject;
        Ccs = ccs;
        Bccs = bccs;
        Contents = contents;
        Attachments = attachments;
        Status = status;
    }
}
Run Code Online (Sandbox Code Playgroud)


归档时间:

查看次数:

382 次

最近记录:

5 年,3 月 前