데이터 유효성 검사(Validation) 와 모델 메타데이터(Metadata) 를 제공하는 .NET 라이브러리입니다.
주로 다음과 같은 용도로 사용합니다.
네임스페이스
- 입력값 검증
- API Request 검증
- ASP.NET MVC / Web API 모델 검증
- Entity Framework 모델 제약조건 정의
- 화면 표시(Display) 정보 정의
|
1 |
using System.ComponentModel.DataAnnotations; |
1. Required
필수 입력값
|
1 2 3 4 5 |
public class Passenger { [Required] public string Name { get; set; } } |
검증:
|
1 2 3 4 5 6 7 8 9 10 |
var p = new Passenger(); var context = new ValidationContext(p); var results = new List<ValidationResult>(); bool isValid = Validator.TryValidateObject( p, context, results, true); |
결과
|
1 |
Name 필드는 필수입니다. |
2. StringLength
문자 길이 제한
|
1 2 3 4 5 |
public class Passenger { [StringLength(20)] public string Name { get; set; } } |
최소/최대 길이
|
1 2 |
[StringLength(20, MinimumLength = 2)] public string Name { get; set; } |
3. MaxLength
최대 길이
|
1 2 |
[MaxLength(50)] public string Email { get; set; } |
4. MinLength
최소 길이
|
1 2 |
[MinLength(2)] public string Name { get; set; } |
5. Range
숫자 범위
|
1 2 |
[Range(1, 999)] public int Quantity { get; set; } |
예:
|
1 2 |
[Range(0, 100)] public int Score { get; set; } |
6. EmailAddress
이메일 형식 검사
|
1 2 |
[EmailAddress] public string Email { get; set; } |
예:
|
1 2 |
abc@test.com → OK abc → 오류 |
7. Phone
전화번호 형식
|
1 2 |
[Phone] public string Mobile { get; set; } |
8. Url
URL 형식
|
1 2 |
[Url] public string Website { get; set; } |
9. RegularExpression
정규식 검사
예: PNR 6자리
|
1 2 |
[RegularExpression(@"^[A-Z0-9]{6}$")] public string PNR { get; set; } |
허용:
|
1 2 |
ABC123 GY459S |
불허:
|
1 2 |
ABC-123 ABCDEFG |
10. Display
화면 표시명
|
1 2 |
[Display(Name = "예약번호")] public string PNR { get; set; } |
11. DisplayFormat
출력 형식
|
1 2 |
[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}")] public DateTime IssueDate { get; set; } |
12. Key
Entity Framework 기본키
|
1 2 3 4 5 |
public class Ticket { [Key] public int Id { get; set; } } |
13. Custom Validation
직접 검증 로직 작성
|
1 2 3 4 5 6 |
public class Ticket { [CustomValidation(typeof(TicketValidator), nameof(TicketValidator.ValidateTicket))] public string TicketNo { get; set; } } |