Skip to content

数据校验

确保应用程序接收到的数据符合期望格式和规则,防止不正确或恶意的数据输入,提高应用程序的健壮性和安全性。

数据注解

数据注解(Data Annotations) 一种简单直观的数据校验方式。通过在模型属性上添加特定的注解Attribute

csharp
using System.ComponentModel.DataAnnotations;

public class Product
{
    public int Id { get; set; }

    [Required(ErrorMessage = "Product name is required")]
    [StringLength(100, ErrorMessage = "Product name cannot be longer than 100 characters")]
    public string Name { get; set; }

    [Range(1, 10000, ErrorMessage = "Price must be between $1 and $10000")]
    public decimal Price { get; set; }
}

以下是一些内置验证特性:

  • Compare:验证模型中的两个属性是否匹配。
  • EmailAddress:验证属性是否有电子邮件格式。
  • Phone:验证属性是否有电话号码格式。
  • Range:验证属性值是否在指定范围内。
  • ....

System.ComponentModel.DataAnnotations 命名空间中可找到验证特性的完整列表。

Fluent Validation

Fluent Validation 是一个.NET库,它允许你以流畅的接口创建强大的校验规则。这种方式比数据注解提供了更多的灵活性和复杂的校验逻辑。

首先,需要安装Fluent Validation库:

shell
Install-Package FluentValidation.AspNetCore

然后,创建一个继承自AbstractValidator<T>的校验器类:

csharp
using FluentValidation;

public class ProductValidator : AbstractValidator<Product>
{
    public ProductValidator()
    {
        RuleFor(x => x.Name).NotEmpty().WithMessage("Product name is required")
                            .Length(0, 100).WithMessage("Product name cannot be longer than 100 characters");
        RuleFor(x => x.Price).InclusiveBetween(1, 10000).WithMessage("Price must be between $1 and $10000");
    }
}

最后,在Startup.cs中配置Fluent Validation:

csharp
services.AddControllers()
        .AddFluentValidation(fv => fv.RegisterValidatorsFromAssemblyContaining<ProductValidator>());

更多关于资料可查阅官方文档