Я пытаюсь написать правила для проверки поля для проверки.
Сначала я хочу проверить, является ли Location Id
empty
, null
или exist
в базе данных, а затем обрабатывается только для другой проверки.
Но с кодом, который я использовал, только проверяйте, если empty
, он не останавливается, если Location Id
не существует в базе данных.
Регистрация модели
public class RegisterModel
{
public long LocationId {get;set;}
public long FirstName {get;set;}
public long LastName {get;set;}
//...other property to be added
}
JSON я перехожу к API:
{
"FirstName": "John",
"LocationId": "1234534",
}
* * * * * * * * * * * * * * * * * * * * не существует в базе данных: * Я получаю ответ как:
{
"Errors": [
{
"FieldName": "LastName",
"Message": "'Last Name' must not be empty."
},
{
"FieldName": "LocationId",
"Message": "Invalid request."
}
]
}
Правило проверки я использую:
public class RegisterModelValidator : AbstractValidator<RegisterModel>
{
private readonly DbContext _context;
public RegisterModelValidator(DbContext context)
{
this._context = context;
this.CascadeMode = CascadeMode.StopOnFirstFailure;
RuleFor(req => req.LocationId)
.NotEmpty().WithMessage("param1 is missing.")
.Must(IsValidRequest).WithMessage("Invalid request.");
When(x => x.LocationId != null, () => {
RuleFor(x => x.FirstName).Cascade(CascadeMode.StopOnFirstFailure).NotNull().NotEmpty();
RuleFor(x => x.LastName).Cascade(CascadeMode.StopOnFirstFailure).NotNull().NotEmpty();
});
}
private bool IsValidRequest(string req)
{
var locationId = long.TryParse(req, out long result) ? result : 0;
return _context.Locations.Any(x => x.LocationExtId == locationId);
}
private bool BeAValidDate(string value)
{
DateTime date;
return DateTime.TryParse(value, out date);
}
}
В моем состоянии я хочу, чтобы, если location id
отсутствует или не существует в базе данных, проверка должна быть немедленно прекращена, она не должна проверять другое поле.