Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASP.NET核心:自定义验证 背景_C#_Asp.net_Asp.net Core_Asp.net Core 2.1 - Fatal编程技术网

C# ASP.NET核心:自定义验证 背景

C# ASP.NET核心:自定义验证 背景,c#,asp.net,asp.net-core,asp.net-core-2.1,C#,Asp.net,Asp.net Core,Asp.net Core 2.1,我有一个用asp.net core v2.1编写的web api。这是我的服务公开的功能: [HttpPost] [Route("submit")] public async Task<ActionResult<int>> DoIt(CustomModel model) { if (!ModelState.IsValid) return new StatusCodeResult(403); // Custom 403 will be here.

我有一个用asp.net core v2.1编写的web api。这是我的服务公开的功能:

[HttpPost]
[Route("submit")]
public async Task<ActionResult<int>> DoIt(CustomModel model)
{
    if (!ModelState.IsValid)
        return new StatusCodeResult(403); // Custom 403 will be here.

    // ...
}
这种组合(方法+模型)工作正常,直到客户端不向服务器提供
MagicNumber

问题 与旧的asp.net(.net framework)不同,当模型验证失败时,会自动向客户端发送403错误消息

我希望防止这种默认行为,并向用户提供自定义错误消息。我更喜欢这样定义自定义响应:

[HttpPost]
[Route("submit")]
public async Task<ActionResult<int>> Submit(CustomModel model)
{
    if (!ModelState.IsValid)
        return new CustomErrorCode_BadRequest();
    //...
}
添加这行代码后,我能够访问我的
if(!ModelState.IsValid)
语句。在此之前,请求在前面的步骤中被阻止。不幸的是,
ModelState.IsValid
总是返回
true
(无论输入是什么)。我猜这是因为我“清除”了所有的验证器——这听起来是个坏主意

应该怎么做

谢谢

感谢@compufaker(来源:)将此代码添加到
Starup.cs
解决了以下问题:

    services.Configure<ApiBehaviorOptions>(opt =>
    {
        opt.SuppressModelStateInvalidFilter = true;
    });
services.Configure(opt=>
{
opt.SuppressModelStateInvalidFilter=true;
});

这有帮助吗?你的类中有[ApiController]属性吗?可能是@Compufreak的重复-是!这就解决了问题。谢谢你的帮助!可能重复的
services.AddMvc(options => options.ModelValidatorProviders.Clear());
    services.Configure<ApiBehaviorOptions>(opt =>
    {
        opt.SuppressModelStateInvalidFilter = true;
    });