C# WebApi 添加参数校验

代码类:

  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参数不能为空"}
}


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章