Как получить доступ к параметру маршрута в пользовательском валидаторе в веб-API ASP.NET Core?C#

Место общения программистов C#
Ответить
Anonymous
 Как получить доступ к параметру маршрута в пользовательском валидаторе в веб-API ASP.NET Core?

Сообщение Anonymous »

Я реализовал собственный валидатор модели с использованием аннотаций данных, где я хотел сравнить две даты и проверить, больше ли одна из них или нет.
Он отлично работает в POST (создать) конечную точку. Однако возникает проблема с конечной точкой PUT (обновление).
Поскольку в методе PUT мы хотим получить одну дату из базы данных, используя {id , который находится в конечной точке PUT.

Код: Выделить всё

public class Contract
{
[JsonPropertyName("StartDate")]
public DateTime StartDate { get; set; }

[DateGreaterThan("StartDate", ErrorMessage="EndDate must be greate than start date.")]
[JsonPropertyName("EndDate")]
public DateTime EndDate { get; set; }
}

internal class DateGreaterThanAttribute : ValidationAttribute
{
private readonly string _comparisonProperty;

public DateGreaterThanAttribute(string comparisonProperty)
{
_comparisonProperty = comparisonProperty;
}

protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
// get your StartDate and EndDate from model and value
DateTime StartDate = (DateTime)value;

var property = validationContext.ObjectType.GetProperty(_comparisonProperty);

if (property == null)
{
throw new ArgumentException("Comparison property with this name not found");
}

var comparisonValue = property.GetValue(validationContext.ObjectInstance);

// perform comparison
// This works in POST
if (StartDate < (DateTime)comparisonValue)
{
return new ValidationResult("start date must be less than the end date");
}
else
{
return ValidationResult.Success;
}

// Now in case of PUT, I want to get StartDate from
// the database querying the record using "id"
// (1234 in below example) from Route of endpoint
// https://localhost:5001/mycontroller/1234
}
}
Я пробовал много решений, но ни одно из них не близко к этому.
Мы не можем выполнить эту проверку в контроллере в соответствии с требованиями от бизнеса. Это должна быть проверка на основе модели.

Подробнее здесь: https://stackoverflow.com/questions/787 ... re-web-api
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»