将 JSON 绑定到模型时使 WebAPI 拒绝未知字段

Make WebAPI reject unknown fields when binding JSON to a model

在 ASP .NET WebAPI 中,考虑以下简单模型 class:

public class Model {
    public string Value { get; set; }
}

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

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

    // more code ...
}

并且我传入{ "unknown": "value" }作为请求体,model binder会欣喜若狂的成功,完全忽略未知字段。这对于面向未来来说不是很可接受,因为我们希望保留所有可能的字段值并在提供时出错,而不是默默地失败,让某人以后搬起石头砸自己的脚。

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

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

"The Json.Net serializer has a MissingMemberHandling setting which you can set to Error. (The default is Ignore.) This will cause the serializer to throw a JsonSerializationException during deserialization whenever it encounters a JSON property for which there is no corresponding property in the target class."

在: Can you detect if an object you deserialized was missing a field with the JsonConvert class in Json.NET

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