繁体   English   中英

基于具有属性的另一个属性的 ASP.NET Core 检查验证

[英]ASP.NET Core Check validation based on another property with attribute

我的问题是我有一个名为 DocumentType 的模型

Type 1 - pdf only
Type 2 - excel only

用户必须选择要上传的类型和文件。

现在我想做一些自定义验证来检查与文件类型关联的扩展名,但我似乎无法访问 Document 中的 DocumentType 属性

public class Document
{
    public int Id { get; set; }

    [Required]
    [StringLength(100)]
    [MaxLength(100)]
    public string FileName { get; set; }

    public byte[] FileBytes { get; set; }

    [Required]
    [StringLength(65)]
    [MaxLength(65)]
    public string ContentType { get; set; }

    [StringLength(100)]
    [MaxLength(100)]
    [Display(Name = "Observações")]
    public string Observacoes { get; set; }

    [Required]
    [Display(Name = "Tipo Documento")]
    public int DocumentTypeId { get; set; }
    public DocumentType DocumentType { get; set; }

    public int ArtigoId { get; set; }
    public Artigo Artigo { get; set; }
}    

在我的页面上,我有这些属性

[BindProperty]
public Document Document { get; set; }  
[Required]
[BindProperty]
[MaxFileSize(3 * 1024 * 1024)]
[CheckExtension]
public IFormFile File { get; set; }

这是验证属性,我将在其中检查扩展

public class CheckExtension : ValidationAttribute
{
    protected override ValidationResult IsValid(object value, ValidationContext validationContext)
    {
        var file = value as IFormFile;
        var extension = Path.GetExtension(file.FileName);

       // TODO

        return ValidationResult.Success;
    }

}

最简单的解决方案是添加IFormFIle属性 do Document并将验证属性应用于类

[CheckExtension]
public class Document
{
    public IFormFile FormFile { get; set; }

    public DocumentTypo DocumentType { get; set; }

    //...
}

并将属性的代码更改为

public class CheckExtension : ValidationAttribute
{
    protected override ValidationResult IsValid(object value, ValidationContext validationContext)
    {
        var document = value as Document;
        var extension = Path.GetExtension(document.FormFile.FileName);
        // TODO

        return ValidationResult.Success;
    }
}

如果您不能或不想修改Document类,您可以创建一个包装类而不是保存一个文档和一个文件

[CheckExtension]
public class DocumentWrapper
{
    public Document Document { get; set; }

    public IFormFile FormFile { get; set; }
}

并更新属性

public class CheckExtension : ValidationAttribute
{
    protected override ValidationResult IsValid(object value, ValidationContext validationContext)
    {
        var document = value as DocumentWrapper;
        var extension = Path.GetExtension(document.FormFile.FileName);
        // TODO

        return ValidationResult.Success;
    }

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM