在 ASP.NET Core 中查看模型和 Fluent Validation
View models and Fluent Validation in ASP.NET Core
我们如何验证从视图传递到 ASP.NET 核心中的 API 控制器的模型。是否有像 FluentValidation 这样的工具或任何类似的方法可以自定义 return 我们的错误和消息返回客户端应用程序?
[HttpPost]
public ActionResult Register(RegisterViewModel model)
{
// if the validation doesn't match then load same view again with errors
if (!ModelState.IsValid)
{
return View(model);
}
}
您使用了 IValidatableObject 接口。然后创建一个抽象基础 class 并让你的 class 继承它。您将需要添加对 System.ComponentModel.DataAnnotations 的引用。您也可以将辅助方法添加到基础 class。
public abstract class ValidatingBase : IValidatableObject
{
public bool IsNullOrEmpty(string property)
{
return string.IsNullOrEmpty(property);
}
#region IValidatableObject
public abstract IEnumerable<ValidationResult> Validate(ValidationContext validationContext);
public IEnumerable<ValidationResult> Validate()
{
var validationErrors = new List<ValidationResult>();
var ctx = new ValidationContext(this, null, null);
Validator.TryValidateObject(this, ctx, validationErrors, true);
return validationErrors;
}
#endregion IValidatableObject
}
然后你的class继承了上面的
public class InsertCompanies : ValidatingBase
{
public string CompanyName { get; set; }
#region ValidatingCommandBase
public override IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
if (this.IsNullOrEmpty(this.Name))
{
yield return new ValidationResult($"{nameof(this.Name)} field can't be null or empty.", new[] { nameof(this.Name) });
}
if (this.Name?.Length > 100)
{
yield return new ValidationResult($"{nameof(this.Name)} field can't be greater than 100 characters.", new[] { nameof(this.Name) });
}
}
#endregion ValidatingCommandBase
}
对于您可以使用上述实现执行的操作没有太多限制。也许这对您来说是一个可行的选择?
Asp.Net Core 很乐意为您调用该方法,更多信息可以在下面的 link 中找到。
https://docs.asp.net/en/latest/mvc/models/validation.html
我们如何验证从视图传递到 ASP.NET 核心中的 API 控制器的模型。是否有像 FluentValidation 这样的工具或任何类似的方法可以自定义 return 我们的错误和消息返回客户端应用程序?
[HttpPost]
public ActionResult Register(RegisterViewModel model)
{
// if the validation doesn't match then load same view again with errors
if (!ModelState.IsValid)
{
return View(model);
}
}
您使用了 IValidatableObject 接口。然后创建一个抽象基础 class 并让你的 class 继承它。您将需要添加对 System.ComponentModel.DataAnnotations 的引用。您也可以将辅助方法添加到基础 class。
public abstract class ValidatingBase : IValidatableObject
{
public bool IsNullOrEmpty(string property)
{
return string.IsNullOrEmpty(property);
}
#region IValidatableObject
public abstract IEnumerable<ValidationResult> Validate(ValidationContext validationContext);
public IEnumerable<ValidationResult> Validate()
{
var validationErrors = new List<ValidationResult>();
var ctx = new ValidationContext(this, null, null);
Validator.TryValidateObject(this, ctx, validationErrors, true);
return validationErrors;
}
#endregion IValidatableObject
}
然后你的class继承了上面的
public class InsertCompanies : ValidatingBase
{
public string CompanyName { get; set; }
#region ValidatingCommandBase
public override IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
if (this.IsNullOrEmpty(this.Name))
{
yield return new ValidationResult($"{nameof(this.Name)} field can't be null or empty.", new[] { nameof(this.Name) });
}
if (this.Name?.Length > 100)
{
yield return new ValidationResult($"{nameof(this.Name)} field can't be greater than 100 characters.", new[] { nameof(this.Name) });
}
}
#endregion ValidatingCommandBase
}
对于您可以使用上述实现执行的操作没有太多限制。也许这对您来说是一个可行的选择?
Asp.Net Core 很乐意为您调用该方法,更多信息可以在下面的 link 中找到。 https://docs.asp.net/en/latest/mvc/models/validation.html