gpt4 book ai didi

c# - 验证 POST 请求的输入?

转载 作者:行者123 更新时间:2023-12-05 07:11:59 25 4
gpt4 key购买 nike

我已经为 REST POST api 端点制作了一个 Controller ,如下所示

public IActionResult POST([FromBody]Person person) 
{
....
}

Person 定义为

public class Person 
{
public string Name {get; set;}
public int Age {get; set;}
}

意味着 post 请求能够反序列化这样的输入

{
"Name": "Peter",
"Age": 2
}

没有任何问题...

当我传递类似

的东西时,问题就出现了
{
"Name": "Peter",
"Age": 2,
"Error": 123123123
}

它仍然创建了一个 Person ,其中前两个已填写..

我想在这里触发一个错误,说明输入格式错误。

我正在存储第一个输入 - 然后使用它来根据第一个输入比较下一个输入。如果它们相同 - 什么都不应该发生。

但由于最后一个输入包含一个无效字段,但输入创建的实际实例与第一个完全相似 - 我得到了它们不相等的错误?

我假设 JSON 中的 error 语句以某种方式存储在新实例中?但是我如何确保在 Controller 创建给定 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; }
}

在 Controller 的 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 操作中接受原始数据,然后解析和检查。

关于c# - 验证 POST 请求的输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60575964/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com