C# 使WebAPI在将JSON绑定到模型时拒绝未知字段 在ASP.NET WebAPI中,考虑下面的简单模型类: public class Model { public string Value { get; set; } }

C# 使WebAPI在将JSON绑定到模型时拒绝未知字段 在ASP.NET WebAPI中,考虑下面的简单模型类: public class Model { public string Value { get; set; } },c#,asp.net,json,asp.net-web-api,model-binding,C#,Asp.net,Json,Asp.net Web Api,Model Binding,如果我有一个控制器方法将此作为参数: [HttpPut] public HttpResponseMessage PutModel(Model data) { if (!ModelState.IsValid) return Request.CreateResponse(HttpStatusCode.BadRequest); // more code ... } 我传入{“unknown”:“value”}作为请求主体,模型绑定器将愉快地成功,完全忽略未知字段。这

如果我有一个控制器方法将此作为参数:

[HttpPut]
public HttpResponseMessage PutModel(Model data)
{
    if (!ModelState.IsValid)
        return Request.CreateResponse(HttpStatusCode.BadRequest);

    // more code ...
}
我传入
{“unknown”:“value”}
作为请求主体,模型绑定器将愉快地成功,完全忽略未知字段。这对于将来的校对来说是不太可接受的,因为我们希望保留所有可能的字段值,并在提供这些值时出错,而不是只是默默地失败,允许有人稍后对自己开枪


如何在未知字段上生成模型绑定错误?

也许Brian Rogers的这个解决方案可以帮助

“Json.Net序列化程序具有MissingMemberHandling设置,您可以将其设置为错误。(默认值为Ignore。)这将导致序列化程序在反序列化过程中,每当遇到目标类中没有相应属性的Json属性时,就会抛出JsonSerializationException。”

地址:


我没有在这里进行测试,但如果您直接从HttpRequest获取数据,并尝试按照Brian Rogers方法进行反序列化,则可以使用此Json.Net设置。

我认为您可能需要编写自己的模型绑定器。