.net core 统一参数校验及异常处理

.net core 统一参数校验及异常处理

相信大家都知道在前后端分离的开发模式中,异常处理和参数检验都是很重要的事情

那么如何做好处理呢?

首先我们来介绍一下如何做参数校验:

参数检验那我们一定会想到实体类属性,Required 需要引用命名空间System.ComponentModel.DataAnnotations

其实除了Required 还有很多具体大家可以参考

https://docs.microsoft.com/en-us/dotnet/api/system.componentmodel.dataannotations?redirectedfrom=MSDN&view=netcore-3.1

我们这里已注册为例

首先来定义我们实体类

    public class UserRegisterPostVm
    {

        [Required(ErrorMessage = "用户Code不能为空")]
        public string Code { get; set; }

        [Required(ErrorMessage = "用户名称不能为空")]
        public string Name { get; set; }

        [Required(ErrorMessage = "用户年龄不能为空")]
        [Range(1, 100, ErrorMessage = "年龄必须介于1~100之间")]
        public int? Age { get; set; }

        [Required(ErrorMessage = "用户邮箱不能为空")]
        [EmailAddress(ErrorMessage = "请填写正确的邮箱地址")]
        public string Email { get; set; }
    }

实体属性也可以都好隔开看个人的习惯,

下面来编写我们的统一参数处理,这里我们是已中间件的形式

.netcore中的中间件大家应该都了解过如果不清楚的话推荐大家去看看

园子里有很多相关文章,可以自行了解

代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace ApiSource
{
    public class ValidateModelAttribute : ActionFilterAttribute
    {
        public override void OnActionExecuting(ActionExecutingContext context)
        {
            if (!context.ModelState.IsValid)
            {
                var result = context.ModelState.Keys
                        .SelectMany(key => context.ModelState[key].Errors.Select(x => new ValidationError(key, x.ErrorMessage)))
                        .ToList();
                context.Result = new ObjectResult(result);
            }
        }
    }
    public class ValidationError
    {
        [JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
        public string Field { get; }
        public string Message { get; }
        public ValidationError(string field, string message)
        {
            Field = field != string.Empty ? field : null;
            Message = message;
        }
    }
}

startup.cs

            services.AddMvc(options =>
            {
                options.Filters.Add<ValidateModelAttribute>();
            });
            
            // 关闭netcore自动处理参数校验机制
            services.Configure<ApiBehaviorOptions>(options => options.SuppressModelStateInvalidFilter = true);

猜你喜欢

转载自www.cnblogs.com/Bczc/p/12910865.html