当我使用.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]
,但在所有情况下都是有价值的,请转到下一步。
如果有人需要任何其他信息,请发表评论。我也会添加其他信息。
答案 0 :(得分:1)
在文档中,据说在2.1.1中,“模型状态”错误由ApiController自动处理,但仍未得到正确的结果。并且我还在属性上添加了[Required],但在所有情况下它都是有价值的,请转到下一步。
当您使用ASP.NET Core 2.1(或2.2)时,则选择加入行为发生变化的新功能(例如[ApiController]
)。
仅当您选择加入ASP.NET Core 2.1(如果您使用的是ASP.NET Core 2.2,则为2.2)功能时,使用[ApiController]
属性的自动模型验证才有效。
您可以在Startup.cs中做到这一点:
services.AddMvc()
.SetCompatibilityVersion(CompatibilityVersion.Version_2_1)
这将启用具有[ApiController]
属性的自动验证。 here和here也对此进行了记录。
需要使用
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"; });