.NET10:asp.net core mini api中的验证

360影视 日韩动漫 2025-04-18 08:50 2

摘要:现在 .NET 最小 API(Minimal API) 也可以自动帮你做“数据验证”了。意思就是——如果用户请求你的 API 时,传过来的参数不符合你规定的要求,比如某个字段必须有值、有最大长度、格式要对等等,框架可以自动帮你检查这些东西,不用你手动去写判断逻

现在 .NET 最小 API(Minimal API) 也可以自动帮你做“数据验证”了。意思就是——如果用户请求你的 API 时,传过来的参数不符合你规定的要求,比如某个字段必须有值、有最大长度、格式要对等等,框架可以自动帮你检查这些东西,不用你手动去写判断逻辑。

net10.0enableenable$(InterceptorsNamespaces);Microsoft.AspNetCore.Http.Validation.Generated

下面是一个具体的案例:

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}"));//嵌套验证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方法来无效化验证:

嵌套验证:

来源:opendotnet

相关推荐