Я использую. NET Core 2.1.
Это мой контроллер:
namespace MyApp.Controllers
{
/// <summary>
/// Cost controller
/// </summary>
[Route("api/v1/[controller]")]
[Produces("application/json")]
[ApiController]
public class CostController : ControllerBase
{
И один из маршрутов:
/// <summary>
/// Estimate cost
/// </summary>
/// <param name="info">Processing information</param>
[HttpPost("estimate")]
public IActionResult Estimate(ProcessingInfo info)
ProcessingInfo
определяется так:
public class ProcessingInfo
{
[Range(0.0000001, double.MaxValue)]
[JsonProperty(PropertyName = "inputSizeGB", Required = Required.Always)]
public double InputSizeGB { get; set; }
}
В Startup.cs
у меня есть следующие строки:
services.AddMvc()
.AddJsonOptions(options => options.SerializerSettings.ContractResolver = new DefaultContractResolver())
.SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
Я также пробовал без SetCompatibilityVersion
.
Будь то через интеграционные тесты с использованием TestServer или Postman, если я отправлю недопустимую модель:
{
"inputSizeGB": -1
}
Я получу ответ 200-OK, а не ожидаемый BadRequest 400:
Обратите внимание, что если я вручную добавлю проверку с помощью if (!ModelState.IsValid)
, модель будет объявлена недействительной.
Все это из существующей кодовой базы, поэтому я неистово ищу то, что может вызвать такой побочный эффект, но до сих пор мне не повезло.