347 End Point Filters

步骤

1、Product.cs属性添加DataAnnotation

using System.ComponentModel.DataAnnotations;
namespace MinimalAPI.Models
{
    public class Product
    {
        [Required(ErrorMessage = "Id can't be blank")]
        [Range(1, int.MaxValue, ErrorMessage = "Id should be between 1 to maximum value of int")]
        public int Id { get; set; }
        [Required(ErrorMessage = "Product Name can't be blank")]
        public string? ProductName { get; set; }
        public override string ToString()
        {
            return $"Id: {Id}, ProductName: {ProductName}";
        }
    }
}

2、AddEndpointFilter

ProductsMapGroup.cs中更新POST方法

//POST /products
 group.MapPost("/", async (HttpContext context, Product product) =>
 {
     products.Add(product);
     await context.Response.WriteAsync("Product Added");
     await context.Response.WriteAsync(JsonSerializer.Serialize(product));
 }).AddEndpointFilter(async (EndpointFilterInvocationContext context, EndpointFilterDelegate next) =>
 {
     //Before logic
     var product = context.Arguments.OfType<Product>().FirstOrDefault();
     if (product == null)
     {
         return Results.BadRequest("Product details are not found in the request");
     }
     var validationContext = new ValidationContext(product);
     List<ValidationResult> errors = new List<ValidationResult>();
     bool isValid = Validator.TryValidateObject(product, validationContext, errors, true);
     if (!isValid)
     {
         return Results.BadRequest(errors.FirstOrDefault()?.ErrorMessage);
     }
     //invokes the subsequent endpoint filter or endpoint's request delegate
     var result = await next(context);
     //After logic
     return result;
 });

结果

通过Postman测看到先执行了Before logic做了验证的工作,执行顺序同前面学到的ASP.NET Core Filters。

Gitee获取源码:

https://gitee.com/huang_jianhua0101/asp.-net-core-8.git

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黄健华Yeah

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值