首页 > 解决方案 > Asp.Net Core 2.1 ApiController 属性不验证模型

问题描述

我正在使用 .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)模型的检查,则声明无效。

所有这些都来自现有的代码库,所以我正在疯狂地寻找可能导致这种副作用的原因,但到目前为止我一直很不走运。

标签: c#asp.net-core-webapi

解决方案


services.Configure<ApiBehaviorOptions>(options => options.SuppressModelStateInvalidFilter = true);所以我发现了问题,在服务配置中设置了一些。


推荐阅读