Skip to content

数据校验

数据校验是确保应用程序接收到的数据符合预期格式和规则的重要手段,能够有效防止不正确或恶意的数据输入,从而提升应用程序的健壮性和安全性。

1. 数据注解(Data Annotations)

数据注解是一种简单直观的数据校验方式,通过在模型属性上添加特定的注解(Attribute)来实现校验功能。

示例代码

csharp
using System.ComponentModel.DataAnnotations;

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

    [Required(ErrorMessage = "产品名称为必填项")]
    [StringLength(100, ErrorMessage = "产品名称长度不能超过100个字符")]
    public string Name { get; set; }

    [Range(1, 10000, ErrorMessage = "价格必须在 $1 至 $10000 之间")]
    public decimal Price { get; set; }
}

常见内置验证特性

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

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

更多验证特性可参考官方文档:System.ComponentModel.DataAnnotations


2. Fluent Validation

Fluent Validation 是一个强大的 .NET 库,支持通过流畅接口创建灵活且复杂的校验规则。相比数据注解,它提供了更高的灵活性和可扩展性。

使用步骤

1. 安装库

首先,需要安装 FluentValidation.AspNetCore 包:

shell
Install-Package FluentValidation.AspNetCore

2. 创建校验器类

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

csharp
using FluentValidation;

public class ProductValidator : AbstractValidator<Product>
{
    public ProductValidator()
    {
        RuleFor(x => x.Name)
            .NotEmpty().WithMessage("产品名称为必填项")
            .Length(0, 100).WithMessage("产品名称长度不能超过100个字符");

        RuleFor(x => x.Price)
            .InclusiveBetween(1, 10000).WithMessage("价格必须在 $1 至 $10000 之间");
    }
}

3. 配置服务

Startup.cs 文件中配置 Fluent Validation:

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

3. 选择合适的验证方式

验证方式适用场景优势
数据注解简单校验使用方便,配置简单
Fluent Validation复杂校验灵活性高,可扩展性强

总结

  • 数据注解:适合简单的校验场景,使用方便,但灵活性有限。
  • Fluent Validation:适合复杂校验场景,提供更高的灵活性和可扩展性。

更多资料可查阅官方文档:ASP.NET Core 数据校验

最近更新