C# WebApi 添加参数校验

该代码实现了一个`ValidateParamsAttribute`类,用于在API接口中进行参数校验。当接口方法的参数带有`[Required]`特性时,该过滤器会检查参数是否为空,如果为空则返回一个包含错误信息的API响应,状态码为400,提示“参数校验失败”,并将具体错误信息填充到响应数据中。
摘要由CSDN通过智能技术生成

代码类:

  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<RequiredAttribute>().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<object>
                {
                    StatusCode = 400,
                    ErrCode = -1,
                    Msg = "参数校验失败",
                    Data = errors
                };
                actionContext.Response = actionContext.Request.CreateResponse(HttpStatusCode.OK, response);
            }
        }
        private string GetRequiredErrorMessage(HttpParameterDescriptor parameter)
        {
            var requiredAttribute = parameter.GetCustomAttributes<RequiredAttribute>().FirstOrDefault() as RequiredAttribute;
            if (requiredAttribute != null && !string.IsNullOrEmpty(requiredAttribute.ErrorMessage))
            {
                return requiredAttribute.ErrorMessage;
            }
            return $"{parameter.ParameterName}参数不能为空";
        }
    }
    public class Result<T>
    {
        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参数不能为空"
    }
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
C#中,Web API允许我们创建RESTful服务,其中可以处理HTTP请求并返回数据。对于局部更新(也称为部分更新),通常涉及到PUT或PATCH请求,客户端发送包含需要更新的部分字段的新值给服务器,而不是整个实体。 当使用局部更新时,例如你在更新一个用户模型,你可以只发送`id`、`name` 或者 `email`等特定属性的变化,而不是整个用户对象。这通过JSON PATCH标准(RFC 6902)来实现,API会识别哪些字段已更改,并仅更新那些字段,这对于资源有限或性能敏感的应用特别有用。 以下是基本步骤: 1. **创建Controller**:在你的Web API控制器中,定义一个处理PATCH请求的方法,如`[HttpPatch] public IActionResult UpdateUser(int id, [FromBody] PartialUpdateModel userToUpdate)`,其中`PartialUpdateModel`是一个自定义模型,只包含要更新的字段。 2. **解析请求**:在方法体里,从`userToUpdate`模型中获取要更新的字段和新值。 3. **验证和业务逻辑**:检查输入是否有效,如果有权限控制,还需校验用户是否有权限修改该记录。 4. **更新数据库**:使用`DbContext`或`Repository`模式更新数据库中的指定行。 5. **响应结果**:成功更新后,返回表示成功的状态码(通常是200 OK),以及更新后的对象,如果需要,也可以只返回更改过的部分。 ```csharp // 示例代码 public IActionResult PatchUser(int id, [FromBody] PartialUpdateModel partialModel) { // 获取用户并更新特定字段 var user = _context.Users.Find(id); if (user != null) { user.Name = partialModel.Name; // 其他字段更新... _context.Entry(user).State = EntityState.Modified; // 将状态标记为已修改 await _context.SaveChangesAsync(); return Ok(user); // 返回更新后的对象 } else { return NotFound(); // 用户未找到 } } ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值