Я пытаюсь использовать свободную проверку для моих моделей в проекте Web API.У меня есть два класса name OrderHeader
и Items.И у меня есть имя свойства как OrderQty
в классе Items, которое является целым числом, и я применил правило для OrderQty, поскольку оно должно быть только числом (т. Е. 0-9).всякий раз, когда я получаю запрос JSON для OrderQty
в виде буквенно-цифровой (например, 1A), я не могу сериализовать JSON и не могу получить сообщение об ошибке из проверки на Modelstate
.Как этого добиться, может кто-нибудь помочь мне в этом, пожалуйста?Заранее спасибо !!!
Я пытался преобразовать OrderQty
в ToString()
и применил правило, но не смог получить сообщение об ошибке при сериализации JSON.
Мои модальные классы:
public class OrderHeader
{
public string OrderNumber { get; set; }
public string Address1 { get; set; }
public string Address2 { get; set; }
public string City { get; set; }
public string State { get; set; }
public string Zip { get; set; }
public string Phone { get; set; }
public string Created { get; set; }
public List<Items> Items { get; set; }
}
public class Items
{
public string ItemNumber { get; set; }
public string Description { get; set; }
public int OrderQty { get; set; }
public double Weight { get; set; }
public double Price { get; set; }
public string Status { get; set; }
}
Свободные проверки
public class OrderHeaderValidator : AbstractValidator<OrderHeader>
{
public OrderHeaderValidator()
{
RuleFor(x => x.OrderNumber.Trim()).NotEmpty().WithMessage("OrderNumber : cannot be blank.").Length(1, 6).WithMessage("OrderNumber : cannot be more than 6 characters.").Matches("^[0-9]*$").WithMessage("OrderNumber : must contains only numbers");
RuleFor(x => x.Items).SetCollectionValidator(new ItemValidator());
}
}
public class ItemsValidator : AbstractValidator<Items>
{
public ItemsValidator()
{
RuleFor(x => x.OrderQty.ToString()).NotNull().WithMessage("TotalOrderQuantity : cannot be blank").Matches("^[0-9]*$").WithMessage("TotalOrderQuantity : must contains only numbers");
RuleFor(x => x.Status.ToUpper()).NotEmpty().WithMessage("Status : Provide the Status").Length(0, 1).WithMessage("Status : cannot be more than 1 character").Matches("O").WithMessage("Status : Must be 'O'");
}
}
Сериализация и получение сообщения об ошибке:
string errors = JsonConvert.SerializeObject(ModelState.Values
.SelectMany(state => state.Errors)
.Select(error => error.ErrorMessage));
Я ожидаю, что вывод должен быть, если значение для 1A из запроса JSON, то он отображает сообщение об ошибкекак:
TotalOrderQuantity: должен содержать только цифры