Asp. Net Атрибут Core 2.1 ApiController не проверяет модель - PullRequest
0 голосов
/ 29 января 2020

Я использую. 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: Postman

Обратите внимание, что если я вручную добавлю проверку с помощью if (!ModelState.IsValid), модель будет объявлена ​​недействительной.

Все это из существующей кодовой базы, поэтому я неистово ищу то, что может вызвать такой побочный эффект, но до сих пор мне не повезло.

1 Ответ

0 голосов
/ 30 января 2020

Итак, я обнаружил проблему, некоторые настроили services.Configure<ApiBehaviorOptions>(options => options.SuppressModelStateInvalidFilter = true); в конфигурации служб.

...