从你的评论say for instance [max length]?,我认为你可以使用自定义验证属性。你可以参考it。
这是一个用于验证文件大小和文件扩展名的演示:
TestFile.cs:
public class TestFile
{
[MaxFileSize(10000)]
[AllowedExtensionsAttribute(new string[] { ".txt"})]
public IFormFile File { get; set; }
}
MaxFileSizeAttribute.cs:
public class MaxFileSizeAttribute : ValidationAttribute
{
private readonly int _maxFileSize;
public MaxFileSizeAttribute(int maxFileSize)
{
_maxFileSize = maxFileSize;
}
protected override ValidationResult IsValid(
object value, ValidationContext validationContext)
{
var file = value as IFormFile;
if (file != null)
{
if (file.Length > _maxFileSize)
{
return new ValidationResult(GetErrorMessage());
}
}
return ValidationResult.Success;
}
public string GetErrorMessage()
{
return $"Maximum allowed file size is { _maxFileSize} bytes.";
}
}
AllowedExtensionsAttribute.cs:
public class AllowedExtensionsAttribute : ValidationAttribute
{
private readonly string[] _extensions;
public AllowedExtensionsAttribute(string[] extensions)
{
_extensions = extensions;
}
protected override ValidationResult IsValid(
object value, ValidationContext validationContext)
{
var file = value as IFormFile;
var extension = Path.GetExtension(file.FileName);
if (file != null)
{
if (!_extensions.Contains(extension.ToLower()))
{
return new ValidationResult(GetErrorMessage());
}
}
return ValidationResult.Success;
}
public string GetErrorMessage()
{
return $"The file extension is not allowed!";
}
}
控制器:
[HttpGet]
public IActionResult TestFileSize() {
return View();
}
[HttpPost]
public IActionResult TestFileSize(TestFile testFile)
{
if (!ModelState.IsValid) {
Console.WriteLine("error");
}
return View();
}
查看:
@model TestFile
@{
ViewData["Title"] = "TestFileSize";
}
<h1>TestFileSize</h1>
<form method="post" enctype="multipart/form-data">
<input type="file" id="File" asp-for="File" />
<input type="submit" value="submit" />
</form>
结果: