System.ComponentModel.DataAnnotations를 사용하여 일부 데이터 유효성 검사를 수행하여 항목의 제공 가격이 1 $ ~ $ 1,000,000. 나는 ItemPrice라는 클래스를 생성하고 다음과 같은 특성으로 장식했습니다.net의 데이터 주석은 소수 값으로 지정된 범위의 유효성을 검사하지 못합니다.
public class ItemPrice
{
[Required (ErrorMessage = "Name is required")]
public string Name
{
get;
set;
}
[Range(1.00,1000000.00)]
public decimal Price
{
get;
set;
}
}
나중에 내가 ItemPrice.Price 0.0로 설정되어이 클래스의 인스턴스를 확인하려고합니다. 다음 코드는 Name 값이 생략되었지만 1 미만의 가격이 입력 된 것을 결코 감지하지 못합니다. 누구든지 다음 코드가 1에서 1,000,000의 범위를 벗어나는 가격을 감지하지 못하는 이유를 말해 줄 수 있습니까?
private void validateMessage(object message)
{
if (message == null)
{
throw new ArgumentNullException("message null");
}
var context = new ValidationContext(message, serviceProvider: null, items: null);
var results = new List<ValidationResult>();
var isValid = Validator.TryValidateObject(message, context, results);
var sb = new StringBuilder();
if (!isValid)
{
foreach (var validationResult in results)
{
Trace.WriteLine(validationResult.ErrorMessage);
if (sb.Length > 0)
sb.Append("\n");
sb.Append(validationResult.ErrorMessage);
}
Exception innerException = new Exception(sb.ToString());
throw new ArgumentException("Invalid argument(s) in message", innerException);
}
}
오류 메시지를 추가하십시오. ErrorMessage = "{0}의 값은 {1}에서 {2} 사이 여야합니다." – Ehsan
주석은 ModelState.IsValid를 통해 MVC에서 올바르게 작동합니다. ASP.NET MVC 외부에 있다고 가정합니까? 그렇다면 ItemPrice의 메타 데이터에 대한 버디 클래스를 다른 곳에서 사용하고 있습니까? –
예, 안정적인 서비스를 위해 유효성 검사가 웹 API 프로젝트에서 사용되고 있습니다. – user3507823