사용자 지정 데이터 주석 검증기를 만드는 방법
사용자 지정 데이터 주석 유효성 검사를 생성하려고 합니다.작성 방법에 대한 유용한 가이드/샘플이 있습니까?
우선:
StringLength(최소 및 최대 길이)입니다..NET 4에서 이 작업을 수행할 수 있다는 것은 알고 있지만 가능하면 .NET 3.5에서도 최소 길이(x자 이상), 최대 길이(x자 이하) 또는 둘 다(x자와 y자 사이)를 정의할 수 있으면 .NET 3.5에서도 동일한 작업을 수행할 수 있습니다.
두 번째:
모듈러스 산술을 사용한 검증 - 숫자가 유효한 길이라면 모듈러스 11 알고리즘을 사용하여 검증하고 싶습니다(자바스크립트에서 이미 구현했기 때문에 단순한 포팅이 될 것 같습니다).
업데이트:
두 번째 문제를 해결한 것은 자바스크립트 구현을 통해 복사하고 몇 가지 수정을 하는 경우에 불과했기 때문에 이에 대한 솔루션은 필요하지 않습니다.
사용자 지정 데이터 주석 검증기를 만들려면 다음 지침을 따르십시오.
- 클래스는 다음에서 상속되어야 합니다.
System.ComponentModel.DataAnnotations.ValidationAttribute
학급. - 재정의
bool IsValid(object value)
내부에서 유효성 검사 로직을 구현할 수 있습니다.
바로 그겁니다.
중요 주의사항
때때로 개발자가 값이 null/비어 있지 않은지 확인하고 false를 반환합니다.이것은 대개 잘못된 행동입니다. 왜냐하면 그것은 켜져 있기 때문입니다.Required
사용자 정의 검증자가 유효성이 없는 데이터만 유효성 검사하고 반환해야 함을 의미하는 검증자true
그렇지 않은 경우(예 참조).이렇게 하면 필수(필수) 및 비필수 필드에서 사용할 수 있습니다.
예
public class StringLengthRangeAttribute : ValidationAttribute
{
public int Minimum { get; set; }
public int Maximum { get; set; }
public StringLengthRangeAttribute()
{
this.Minimum = 0;
this.Maximum = int.MaxValue;
}
public override bool IsValid(object value)
{
string strValue = value as string;
if (!string.IsNullOrEmpty(strValue))
{
int len = strValue.Length;
return len >= this.Minimum && len <= this.Maximum;
}
return true;
}
}
모든 속성은 원하는 대로 속성으로 설정할 수 있습니다.
몇 가지 예:
[Required]
[StringLengthRange(Minimum = 10, ErrorMessage = "Must be >10 characters.")]
[StringLengthRange(Maximum = 20)]
[Required]
[StringLengthRange(Minimum = 10, Maximum = 20)]
특정 속성이 설정되지 않은 경우 해당 값은 생성자에서 설정되므로 항상 값을 가집니다.위의 사용 예에서 나는 의도적으로 다음을 추가했습니다.Required
Validator도 마찬가지이므로, 제가 작성한 위의 주의 사항과 일치합니다.
중요한
따라서 이 검증자는 필요하지 않은 모델 값에 대해서도 작업을 수행하지만, 모델 값이 존재할 경우 검증을 수행합니다(웹 양식의 텍스트 필드는 필요하지 않지만 사용자가 값을 입력하는 경우에는 유효해야 합니다.
서명이 있는 유효성 검사 기능과 함께 사용
public static ValidationResult Validate(MyType x, ValidationContext context)
예제(문자열 속성의 경우)
using System.ComponentModel.DataAnnotations;
public class MyClass
{
[CustomValidation(typeof(MyClass), "Validate")]
public string MyProperty { get; set; }
public static ValidationResult Validate(string x, ValidationContext context)
{
return (x == "valid")
? new ValidationResult(null)
: ValidationResult.Success;
}
}
저는 이것이 정말 오래된 주제라는 것을 알지만, 이 답을 찾을 때까지 제가 실제로 원하는 답을 찾는 데 어려움을 겪었습니다.
요약하려면 시작 시 서비스를 구성하여 반환할 오류를 처리하는 적절한 개체를 만들어야 합니다.
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2).ConfigureApiBehaviorOptions(options =>
{
options.InvalidModelStateResponseFactory = (context) =>
{
var errors = context.ModelState.Values.SelectMany(x => x.Errors.Select(p => new ErrorModel()
{
ErrorCode = ((int)HttpStatusCode.BadRequest).ToString(CultureInfo.CurrentCulture),
ErrorMessage = p.ErrorMessage,
ServerErrorMessage = string.Empty
})).ToList();
var result = new BaseResponse
{
Error = errors,
ResponseCode = (int)HttpStatusCode.BadRequest,
ResponseMessage = ResponseMessageConstants.VALIDATIONFAIL,
};
return new BadRequestObjectResult(result);
};
});
언급URL : https://stackoverflow.com/questions/3413715/how-to-create-custom-data-annotation-validators
'programing' 카테고리의 다른 글
단순 문자열로 시간 델타 객체를 구성하는 방법 (0) | 2023.07.18 |
---|---|
기존 열에서 새 열을 생성하기 위해 적용되는 판다 성능 대 np.vectorize (0) | 2023.07.18 |
스프링 부트에서 프로필을 기반으로 선택적 테스트를 실행/해제하는 방법 (0) | 2023.07.18 |
git log에서 지점 이름을 표시하려면 어떻게 해야 합니까? (0) | 2023.07.18 |
판다 데이터 프레임 내의 열을 int에서 string으로 변환 (0) | 2023.07.18 |