В контроллере основного приложения ASP. NET, который был украшен атрибутом [ApiController]
, если мы передали пустой объект JSON для конечной точки, которая ожидает следующий объект (из тела запроса, по умолчанию):
public class ComplexObject
{
[Range(1, int.MaxValue, ErrorMessage = "Prop1 must contain a positive number.")]
public int Prop1 { get; set; }
[Range(1, int.MaxValue, ErrorMessage = "Prop2 must contain a positive number.")]
public int Prop2 { get; set; }
}
проверка не проходит должным образом (свойства имеют тип int, им назначено значение по умолчанию для этого типа, равное 0, что не проходит проверку проверки.
Но , если у нас есть конечная точка, которая не принимает сложный объект (из тела), а две переменные типа int из URI, если пользователь просто нажимает конечную точку без строки запроса ( Параметры URI), проверка, по-видимому, проходит, хотя обоим свойствам при отладке присваивается значение 0.
Что отличается в этом случае, когда проверка проходит скорее, чем не проходит? Вот как я оформлены атрибуты для параметров URI:
public IActionResult SomeAction([Range(1, int.MaxValue, ErrorMessage = "Prop1 must contain a positive number.")] int prop1,
[Range(1, int.MaxValue, ErrorMessage = "Prop2 must contain a positive number.")] int prop2)
{
...
}
Очевидно, что если я также добавлю атрибут [Required]
, все будет работать как exp ected. Но тогда почему SomeObject работает без атрибута [Required]
? [Range]
там в основном убивают двух зайцев одним выстрелом!
public IActionResult SomeAction([Required][Range(1, int.MaxValue, ErrorMessage = "Prop1 must contain a positive number.")] int prop1,
[Required][Range(1, int.MaxValue, ErrorMessage = "Prop2 must contain a positive number.")] int prop2)
{
...
}