Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何为ASP.NET核心web api添加全局验证?_C#_Asp.net_Asp.net Mvc_Asp.net Core_Asp.net Web Api - Fatal编程技术网

C# 如何为ASP.NET核心web api添加全局验证?

C# 如何为ASP.NET核心web api添加全局验证?,c#,asp.net,asp.net-mvc,asp.net-core,asp.net-web-api,C#,Asp.net,Asp.net Mvc,Asp.net Core,Asp.net Web Api,比如说,我们有多个模型,其属性为(电子邮件、姓名、地址)。 除这些必填字段外,电子邮件接受@,而地址接受#等 所以我想进行应用程序级验证,这将限制所有特殊字符。对于有异常的属性,将编写一个异常 我是web api新手,希望在startup.cs的某个地方实现它 任何建议都会有帮助。您可以使用FluentValidation 用法: public class MyValidator: AbstractValidator<Customer> { public CustomerVali

比如说,我们有多个模型,其属性为(电子邮件、姓名、地址)。 除这些必填字段外,电子邮件接受@,而地址接受#等

所以我想进行应用程序级验证,这将限制所有特殊字符。对于有异常的属性,将编写一个异常

我是web api新手,希望在startup.cs的某个地方实现它
任何建议都会有帮助。

您可以使用FluentValidation

用法:

public class MyValidator: AbstractValidator<Customer> {
  public CustomerValidator() {
    RuleFor(x => x.Surname).NotEmpty();
    RuleFor(x => x.Forename).NotEmpty().WithMessage("Please specify a first name");
    RuleFor(x => x.Discount).NotEqual(0).When(x => x.HasDiscount);
    RuleFor(x => x.Address).Length(20, 250);
    RuleFor(x => x.Postcode).Must(BeAValidPostcode).WithMessage("Please specify a valid postcode");
  }



  private bool BeAValidPostcode(string postcode) {
    // custom postcode validating logic goes here
  }
}
公共类MyValidator:AbstractValidator{
公共CustomerValidator(){
RuleFor(x=>x.姓氏).NotEmpty();
RuleFor(x=>x.Forename).NotEmpty().WithMessage(“请指定名字”);
规则(x=>x.Discount).NotEqual(0).When(x=>x.HasDiscount);
RuleFor(x=>x.Address).Length(20250);
RuleFor(x=>x.Postcode).Must(BeAValidPostcode).WithMessage(“请指定有效的邮政编码”);
}
私有布尔BeAValidPostcode(字符串邮政编码){
//自定义邮政编码验证逻辑在这里
}
}
在您的情况下,您只需将
AbstractValidator
替换为派生自
AbstractValidator
的基类型,就可以在基DTO上执行所需的任何验证。 虽然我认为您的应用程序中有一些API不带参数。

对我来说,这是最有效、最干净的方法


希望对…有所帮助。

您可以使用FluentValidation

用法:

public class MyValidator: AbstractValidator<Customer> {
  public CustomerValidator() {
    RuleFor(x => x.Surname).NotEmpty();
    RuleFor(x => x.Forename).NotEmpty().WithMessage("Please specify a first name");
    RuleFor(x => x.Discount).NotEqual(0).When(x => x.HasDiscount);
    RuleFor(x => x.Address).Length(20, 250);
    RuleFor(x => x.Postcode).Must(BeAValidPostcode).WithMessage("Please specify a valid postcode");
  }



  private bool BeAValidPostcode(string postcode) {
    // custom postcode validating logic goes here
  }
}
公共类MyValidator:AbstractValidator{
公共CustomerValidator(){
RuleFor(x=>x.姓氏).NotEmpty();
RuleFor(x=>x.Forename).NotEmpty().WithMessage(“请指定名字”);
规则(x=>x.Discount).NotEqual(0).When(x=>x.HasDiscount);
RuleFor(x=>x.Address).Length(20250);
RuleFor(x=>x.Postcode).Must(BeAValidPostcode).WithMessage(“请指定有效的邮政编码”);
}
私有布尔BeAValidPostcode(字符串邮政编码){
//自定义邮政编码验证逻辑在这里
}
}
在您的情况下,您只需将
AbstractValidator
替换为派生自
AbstractValidator
的基类型,就可以在基DTO上执行所需的任何验证。 虽然我认为您的应用程序中有一些API不带参数。

对我来说,这是最有效、最干净的方法


我的回答对你有帮助吗?我的回答对你有帮助吗?