뷰에서 ASP.NET 코어의 API 컨트롤러로 전달 된 모델의 유효성을 검사하는 방법은 무엇입니까? FluentValidation과 같은 도구 또는 우리의 오류와 메시지를 다시 클라이언트 응용 프로그램으로 되돌리기 위해 사용자 정의 할 수있는 유사한 접근법이 있습니까?ASP.NET 모델보기 및 Fluent Validation 코어
1
A
답변
2
IValidatableObject 인터페이스를 사용합니다. 그런 다음 추상 기본 클래스를 만들고 클래스에서 상속 받도록하십시오. System.ComponentModel.DataAnnotations에 대한 참조를 추가해야합니다. 기본 클래스에도 도우미 메서드를 추가 할 수 있습니다. 위의
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
}
에서 상속
다음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
}
클래스는 위의 구현 할 수있는 일에 많은 제한이 없습니다. 아마도 그것은 당신에게 실행 가능한 선택일까요?
Asp.Net Core가 기꺼이 메서드를 호출합니다. 자세한 내용은 아래 링크에서 확인할 수 있습니다. https://docs.asp.net/en/latest/mvc/models/validation.html
1
[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);
}
}
+0
감사합니다. Nasim, 저는 이미 이것을 알고 있습니다. 나는 이것을하기 위해 너겟 라이브러리 또는 더 나은 방법을 사용하여 더욱 역동적이고 맞춤화 된 접근법을 찾고있다. – Coding
.NET Core에는 FluentValidation을 사용할 수 있습니다. 여기에 예제가 있습니다 (https://github.com/JeremySkinner/FluentValidation/issues/98#issuecomment-249701088). –