• .NET Core中的Minimal API现在也可以自动帮你做“数据验证”了
  • 发布于 1周前
  • 48 热度
    0 评论
  • 久拥我i
  • 0 粉丝 59 篇博客
  •   
现在 .NET 最小 API(Minimal API) 也可以自动帮你做“数据验证”了。意思就是——如果用户请求你的 API 时,传过来的参数不符合你规定的要求,比如某个字段必须有值、有最大长度、格式要对等等,框架可以自动帮你检查这些东西,不用你手动去写判断逻辑。
首先需要在项目文件中添加InterceptorsNamesapces:
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>net10.0</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup>
<PropertyGroup>
<InterceptorsNamespaces>$(InterceptorsNamespaces);Microsoft.AspNetCore.Http.Validation.Generated</InterceptorsNamespaces>
</PropertyGroup>
</Project>
下面是一个具体的案例:
using Microsoft.AspNetCore.Http.Validation;
using Microsoft.AspNetCore.Mvc;
using System.ComponentModel.DataAnnotations;

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddValidation();
var app = builder.Build();

// DisableValidation无效化验证
app.MapGet("/person/{id}",
    ([Range(1, 10000, ErrorMessage = "id的范围在1~10000之间")] int id)
        => TypedResults.Ok(id)).DisableValidation();
//验证
app.MapPost("/person", ([Required(ErrorMessage = "姓名不能为空")] string name, [Range(0, 120, ErrorMessage = "年龄应该在0~120之间")] int age) =>
TypedResults.Ok($"{name},{age}"));
// 堆代码 duidaima.com
//嵌套验证
app.MapPost("/order", ([FromBody] Order order) =>
TypedResults.Ok($"{order.OrderNo},{order.Amount}"));

app.Run();

public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
}
public class Order
{
    [Required(ErrorMessage = "订单号不能为空")]
    public string OrderNo { get; set; }

    [Range(1d, double.MaxValue, ErrorMessage = "金额必需大于0")]
    public decimal Amount { get; set; }

    [Required(ErrorMessage = "订单用户必须填写")]
    public User OrderUser { get; set; }
}

public class User
{
    [Range(1, int.MaxValue, ErrorMessage = "id大于0")]
    public int UserID { get; set; }
    [Required(ErrorMessage = "用户名不能为空")]
    public string UserName { get; set; }
}
验证的效果:

可以通过增加DisableValidation方法来无效化验证:

嵌套验证:

用户评论