[英]ASP Net Core model validation Range attribute is ignored
我正在使用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可以正常工作,那么我在做错什么,阻止了数据注释样式的验证? 我不希望手动编写所有验证。
这里的问题是.AddMvcCore()
,它是.AddMvc()
版本。 在此处查看有关此的更多信息: https : //offering.solutions/blog/articles/2017/02/07/difference-between-addmvc-addmvcore/
解决方案是添加.AddDataAnnotations()
,该服务通常由.AddMvc()
添加:
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()
.AddDataAnnotations()
.AddJsonFormatters()
.AddApiExplorer()
.AddAuthorization();
/* Other code, not relevant here. */
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.