验证模型数据并根据结果调用外部API
本文关键字:结果 调用 外部 API 模型 数据 验证 | 更新日期: 2023-09-27 18:16:07
我创建了一个WebAPI web应用程序,我想在POST和基于结果调用外部API时验证数据。除了验证结果外,数据将原样保存在数据库中。只有调用外部API时才会进行验证。
我已经创建了发布到外部API的逻辑,但我不太确定它将如何成为验证数据的最佳方式。
我的模型包括10个类,如下面的Class1,具有多个属性,我为每个类创建了一个控制器。属性可以有真/假值,但作为字符串。
public class Class1
{
public ICollection<Class1Data> Data { get; set; }
}
public class Class1Data
{
public int Id { get; set; }
public string Prop1{ get; set; }
public string Prop2 { get; set; }
..
public string Prop10 { get; set; }
}
WebAPI controller for POST:
[ResponseType(typeof(Class1))]
public async Task<IHttpActionResult> PostClass1(Class1 class1)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
db.Class1.Add(class1);
await db.SaveChangesAsync();
return CreatedAtRoute("DefaultApi", new { id = Class1.Id }, class1);
}
我已经设法以某种方式验证一个属性和POST到外部API,但不太确定我如何能为我所有的模型类做到这一点(我每个有大约10,20个道具)。
var notValid = Class1.Data.Where(x => x.Prop1 == "False");
if (notValid != null)
{
foreach ( var fault in notValid )
{
// Call external API using fault.Prop1 / fault.Prop5 / ..
}
}
我怎样才能做到这一点?我希望我的问题对你有意义。
最简单的方法是使用数据注释:
例子:
[StringLength(100)]
public string AccountKey { get; set; }
[Required]
[StringLength(100)]
public string FirstName { get; set; }
或者如果你需要自定义验证,你可以将它们定义为自定义验证属性,并像下面这样使用它们:
[Required]
[CountryCode]
[StringLength(3)]
public string CountryCode { get; set; }
在这个示例中,[CountryCode]
是一个自定义验证,您可以这样实现:
[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Parameter)]
public class CountryCodeAttribute : RegularExpressionAttribute
{
public CountryCodeAttribute() :
base("^[A-z]{2,3}([-]{1}[A-z]{2,})?([-]?[A-z]{2})?$")
{
ErrorMessage = "Invalid country code.";
}
}
您需要为这种验证导入这个命名空间:
System.ComponentModel.DataAnnotations