1

뷰에서 ASP.NET 코어의 API 컨트롤러로 전달 된 모델의 유효성을 검사하는 방법은 무엇입니까? FluentValidation과 같은 도구 또는 우리의 오류와 메시지를 다시 클라이언트 응용 프로그램으로 되돌리기 위해 사용자 정의 할 수있는 유사한 접근법이 있습니까?ASP.NET 모델보기 및 Fluent Validation 코어

+2

.NET Core에는 FluentValidation을 사용할 수 있습니다. 여기에 예제가 있습니다 (https://github.com/JeremySkinner/FluentValidation/issues/98#issuecomment-249701088). –

답변

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