将 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 设置。
在 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 设置。