c# - 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)
模型的检查,则声明无效。
所有这些都来自现有的代码库,所以我正在疯狂地寻找可能导致这种副作用的原因,但到目前为止我一直很不走运。
解决方案
services.Configure<ApiBehaviorOptions>(options => options.SuppressModelStateInvalidFilter = true);
所以我发现了问题,在服务配置中设置了一些。
推荐阅读
- deep-learning - 如何标记语音数据以进行端到端语音到文本训练
- tensorflow - Tensorflow 对象检测 api 示例不适用于 Tensorflow 1x
- javascript - 如何用 sinon 模拟延迟?
- python-3.x - 如何在具有值而不是单个变量值的列表上应用 PyQt5 事件?
- gem5 - 在哪里可以找到 HPI 默认配置参数?
- html - 我的网站对我的 css 文件中的更改没有反应
- python - 如何对 LightFM 电影推荐系统的用户项目交互矩阵进行交叉验证?
- r - Rtools 4.0(Rstudio 谎称它已被删除)
- python - Discord重写和json无法找出错误
- reactjs - 使用 JSON 表单模式放置条件元素