c# - 模型状态在 asp.Net Core web Api 2.1.1 中始终为真
问题描述
当我使用 .net Core 2.1.0 版和使用下面的代码进行模型状态验证时工作正常。
在Startup.cs文件中添加以下代码
services.AddMvc(config =>
{
config.Filters.Add(new ValidateModelAttribute());
});
并像这样创建ValidateModelAttribute
public class ValidateModelAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext context)
{
if (!context.ModelState.IsValid)
{
context.Result = new BadRequestObjectResult(context.ModelState);
}
}
}
但现在我正在使用2.1.1
,我尝试了所有google and SO post but Model State is always true
。
即使我正在发送空的 json 对象。
在文档中说,在 2.1.1 中,模型状态错误由 自动处理,ApiController
但仍然没有给出正确的结果。我也添加[Required]
了属性,但在所有情况下它都是价值并进入下一步。
如果有人需要任何其他信息,请发表评论。我也会添加其他信息。
解决方案
在文档中说,在 2.1.1 中,模型状态错误由 ApiController 自动处理,但仍然没有给出正确的结果。我也在属性上添加[必需],但在所有情况下它都是价值并进入下一步。
当您使用 ASP.NET Core 2.1(或 2.2)时,行为改变的新功能 (例如[ApiController]
)是可选的。
[ApiController]
仅当您选择加入 ASP.NET Core 2.1(或 2.2,如果您使用 ASP.NET Core 2.2)功能时,使用属性的自动模型验证才有效。
您可以在 Startup.cs 中执行此操作:
services.AddMvc()
.SetCompatibilityVersion(CompatibilityVersion.Version_2_1)
这将启用[ApiController]
属性的自动验证。这也记录在这里和这里。
SetCompatibilityVersion
使用此属性需要2.1 或更高版本的兼容版本(通过 设置)。例如,中突出显示的代码Startup.ConfigureServices
设置了 2.2 兼容性标志:services.AddMvc() .SetCompatibilityVersion(CompatibilityVersion.Version_2_2) .ConfigureApiBehaviorOptions(options => { options.SuppressConsumesConstraintForFormFileParameters = true; options.SuppressInferBindingSourcesForParameters = true; options.SuppressModelStateInvalidFilter = true; options.SuppressMapClientErrors = true; options.ClientErrorMapping[404] = "https://httpstatuses.com/404"; });
推荐阅读
- python - 熊猫中字符串到日期时间的不正确解析
- python - 将变量从 Python 发送到 PHP
- java - 在 Java 中使用 WCF 服务
- amazon-web-services - 即使 EC2 实例正在运行,ECS 中也会列出空的 EC2 实例
- c# - 如何在 C# MVC 中检查方法是否具有 AllowAnonymous 属性
- excel - 计数和复制动态范围 Vba
- excel - 根据单元格值隐藏多行的代码
- ansible - 使用 kolla-ansible 安装 ceph 进行多合一设置
- haskell - 如何在 Haskell 的函数中使用 do 块?
- python - 如果最后一个 impala 语句是 select 语句,如何检查 pyodbc 包?