我为REST POST api端点制作了一个控制器,如下所示
public IActionResult POST([FromBody]Person person)
{
....
}
并且其中Person被定义为
public class Person
{
public string Name {get; set;}
public int Age {get; set;}
}
意味着发布请求可以反序列化这样的输入
{
"Name": "Peter",
"Age": 2
}
没有任何问题...
尽管出现问题,但我传递类似
{
"Name": "Peter",
"Age": 2,
"Error": 123123123
}
它仍会创建一个Person
,其中前两个填写完毕。。
我想在这里触发错误,指出输入格式错误。
我正在存储第一个输入-然后使用它根据第一个输入比较下一个输入。如果它们相同,则什么也不会发生。
但是由于最后一个输入包含一个无效字段,但是实际创建的输入与第一个输入完全相似-我在输入不相等时得到一个错误?
我假设JSON中的error
语句以某种方式存储在新实例中?但是如何在控制器创建给定JSON输入的实例之前确保输入得到验证?
1)要验证您的Person模型,您可以使用类似的东西>
using System.ComponentModel.DataAnnotations; public class Person { [Required] [StringLength(250, MinimumLength = 2)] public string Name { get; set; } [Required] [Range(1, 121)] public int Age { get; set; } }
并且在控制器的POST操作中,您可以使用
if(!ModelState.IsValid){.....}
2)比较两个Person实例是否相等,您可以重写Equals():
public class Person { ... ... public override bool Equals(object obj) => (obj is Person otherPerson) ? (Name,Age) == (otherPerson.Name,otherPerson.Age): false; }
此处将当前实例的名称和年龄与其他实例的名称和年龄进行比较。它将允许使用
if ( person.Equals ( someOtherPErsonInstance ) ){....}
3)如果需要确保POST请求中存在其他字段不是
,则可以添加自定义实现IModelBinder,或在POST操作中接受原始数据,然后进行解析和检查。