C# 如何为ASP.NET核心web api添加全局验证?
比如说,我们有多个模型,其属性为(电子邮件、姓名、地址)。 除这些必填字段外,电子邮件接受@,而地址接受#等 所以我想进行应用程序级验证,这将限制所有特殊字符。对于有异常的属性,将编写一个异常 我是web api新手,希望在startup.cs的某个地方实现它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
任何建议都会有帮助。您可以使用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不带参数。
对我来说,这是最有效、最干净的方法
我的回答对你有帮助吗?我的回答对你有帮助吗?