验证POST请求的输入?

问题描述 投票:1回答:1

我为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输入的实例之前确保输入得到验证?

c# asp.net-core controller json-schema-validator
1个回答
0
投票

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操作中接受原始数据,然后进行解析和检查。
© www.soinside.com 2019 - 2024. All rights reserved.