Я использую Microsoft.AspNetCore.Mvc 2.1.3.
В Startup.cs
:
public void ConfigureServices(IServiceCollection services)
{
services
.AddSingleton<ILocationService, LocationService>()
.AddSingleton(_ => BootStatus.Instantiate())
.AddScoped<IClock>(_ => new ZonedClock(SystemClock.Instance, DateTimeZone.Utc, CalendarSystem.Iso))
.AddHostedService<BootService>()
.AddMvcCore()
.AddJsonFormatters()
.AddApiExplorer()
.AddAuthorization();
/* Other code, not relevant here. */
}
В моем контроллере HTTP у меня есть GET:
[HttpGet(nameof(Location))]
public async Task<IActionResult> Location(
LocationQueryParameters queryParams)
{
if (!ModelState.IsValid)
{
return new BadRequestObjectResult(ModelState);
}
var response = await locationService.Retrieve(
queryParams.Category,
queryParams.ItemsCount);
return StatusCode(200, response);
}
Вот мой объект параметров:
public class LocationQueryParameters
{
[FromQuery(Name = "category")]
[BindRequired]
public string Category { get; set; }
[FromQuery(Name = "itemsCount")]
[BindRequired]
[Range(1, 999)]
public int ItemsCount { get; set; }
}
Атрибут Range полностью игнорируется. Аналогично, если я присоединяю атрибут StringLength к свойству string, он игнорируется. Я также попытался написать собственный атрибут ValidationAttribute, но пошаговое выполнение кода никогда не затрагивает метод IsValid. BindRequired и FromQuery работают нормально, так что я делаю не так, что препятствует проверке стиля аннотации данных? Я предпочел бы не писать всю мою проверку вручную.