C# 具有.NET核心和json验证的WebApi

C# 具有.NET核心和json验证的WebApi,c#,json,asp.net-core-webapi,C#,Json,Asp.net Core Webapi,我正在使用.NETCore2.0创建一些WebAPI。我对验证有问题 [HttpPost] public async Task<IActionResult> RegisterUser([FromBody] RegistrationModel model) { if (model != null && ModelState.IsValid) { // model is valid } } 如果我传递这个json,就有一个完美的匹

我正在使用.NETCore2.0创建一些WebAPI。我对验证有问题

[HttpPost]
public async Task<IActionResult> RegisterUser([FromBody] RegistrationModel model) {
    if (model != null && ModelState.IsValid)
    {
        // model is valid
    }
}
如果我传递这个json,就有一个完美的匹配

{
    "emailAddress" : "test.email@gmail.com",
    "userCustomerId" : "b1cb8805-2a59-428e-9c2a-ec663093f84f"
}
我的问题是,如果我传递一个带有额外字段的json,模型仍然有效

{
    "emailAddress" : "test.email@gmail.com",
    "userCustomerId" : "b1cb8805-2a59-428e-9c2a-ec663093f84f",
    "extraField": "Hello!"
}
基本上,webapi忽略了这个额外的字段,但我想发回一个错误,比如Model是无效的


我如何实现这一点?

这被称为套印,可以在这里找到一些缓解策略:

您可以添加自定义模型绑定或自定义Json反序列化以防止过度伪装,但在我看来这并不值得——请确保您的模型不易受到攻击,然后继续

为什么?

  • 在你接受的事情上要开明

  • 有时客户端会发送一些额外的信息(例如,NewtonSoft.Json这样的$id属性有时会发送),停用这种行为可能会非常烦人

  • {
        "emailAddress" : "test.email@gmail.com",
        "userCustomerId" : "b1cb8805-2a59-428e-9c2a-ec663093f84f",
        "extraField": "Hello!"
    }