c# - 基于另一个具有属性的属性的 ASP.NET Core 检查验证
问题描述
我的问题是我有一个名为 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
属性 doDocument
并将验证属性应用于类
[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;
}
}
推荐阅读
- angular - 当我关闭对话框时复选框未选中 - 角度
- callback - 当调用 openssl 锁定回调时
- rust - 为什么子模块“找不到模块文件”?
- python - “对象不是无”是否与对象相同?
- javascript - Javascript正则表达式:想要排除所有大写的功能词
- ios - 如何识别 MKPointAnnotation 是否已在 Swift 中按下?
- java - 具有众多参数的黄瓜步骤
- python-3.x - Selenium 与 Firefox 67+ 中的代理
- angular - 使用自定义结构指令会在控制台中引发错误?
- bash - (Xubuntu) 如何在窗口标题中显示微调器动画?