C# WebApi 添加参数校验

代码类: public class ValidateParamsAttribute : ActionFilterAttribute{public overrid

代码类:

  public class ValidateParamsAttribute : ActionFilterAttribute{public override void OnActionExecuting(HttpActionContext actionContext){var parameters = actionContext.ActionDescriptor.GetParameters();actionContext.ModelState.Clear();foreach (var parameter in parameters){if (parameter.GetCustomAttributes().Any()){object value = null;var valueProviderResult = actionContext.ActionArguments.TryGetValue(parameter.ParameterName, out value);if (!valueProviderResult || value == null || value.ToString().Trim().Length == 0){var errorMessage = GetRequiredErrorMessage(parameter);actionContext.ModelState.AddModelError(parameter.ParameterName, errorMessage);}}}if (!actionContext.ModelState.IsValid){// 构造返回的 ApiResponse 对象var errors = actionContext.ModelState.ToDictionary(kvp => kvp.Key,e => e.Value.Errors.FirstOrDefault()?.ErrorMessage);// 构造返回的 ApiResponse 对象var response = new Result{StatusCode = 400,ErrCode = -1,Msg = "参数校验失败",Data = errors};actionContext.Response = actionContext.Request.CreateResponse(HttpStatusCode.OK, response);}}private string GetRequiredErrorMessage(HttpParameterDescriptor parameter){var requiredAttribute = parameter.GetCustomAttributes().FirstOrDefault() as RequiredAttribute;if (requiredAttribute != null && !string.IsNullOrEmpty(requiredAttribute.ErrorMessage)){return requiredAttribute.ErrorMessage;}return $"{parameter.ParameterName}参数不能为空";}}public class Result{public int StatusCode { get; set; }public int ErrCode { get; set; }public string Msg { get; set; }public T Data { get; set; }} 

使用方法:

        [Route("api/GetInfo")] //接口地址[HttpGet][ValidateParams]public AjaxResult GetHealth([Required]string A = "", [Required]string B= "", [Required] int C= -1)

说明:在需要参数校验的接口处添加[ValidateParams]注解,然后在需要校验的参数前添加必传[Required]注解。

结果:

{"StatusCode": 400,"ErrCode": -1,"Msg": "参数校验失败","Data": {"C": "C参数不能为空"}
}