如何捕获 Web API URI 参数绑定错误

本文关键字:参数 绑定 错误 URI API 何捕获 Web | 更新日期: 2023-09-27 18:30:39

我正在使用 asp.net web-api并尝试捕获2种情况:

  1. 传递未定义的 Uri 参数
  2. 传递了 Uri 参数的无效值

参数和值绑定成功,但当名称或值无效时,不会发生异常并传递 null。

更多详情:
ModelState.IsValid始终为真
我已经清除了所有格式化程序使用GlobalConfiguration.Configuration.Formatters.Clear();然后添加我继承的 XmlMediaTypeFormatter,它设置 XmlSerializer = true
此外,我正在为复杂类型使用架构生成的类(xsd 工具)

这是控制器方法签名:

public Messages GetMessages(int? startId = null, int? endId = null, DateTime? startDate = null, DateTime? endDate = null, int? messageType = null, string clientId = "", bool isCommentsIncluded = false)

有什么想法吗?

如何捕获 Web API URI 参数绑定错误

创建一个类并修饰要验证的属性。例如(显然,使用您自己的值)

public class ModelViewModel
{
    public int Id { get; set; }
    [Required]
    public int RelationshipId { get; set; }
    [Required]
    public string ModelName { get; set; }
    [Required]
    public string ModelAttribute { get;set; }
}

创建一个筛选器,这样就不必在每个控制器中使用 Model.IsValid。

public class ValidationFilter : ActionFilterAttribute
{
    public override void OnActionExecuting(HttpActionContext actionContext)
    {
        var modelState = actionContext.ModelState;
        if (!modelState.IsValid)
            actionContext.Response = actionContext.Request
                 .CreateErrorResponse(HttpStatusCode.BadRequest, modelState);
    }
}

最后将以下内容添加到 Global.asax 中的 Application_Start() 中

GlobalConfiguration.Configuration.Filters.Add(new ValidationFilter());

希望这有帮助。

更新

public Messages GetMessages([FromUri] ModelViewModel model)

您的模型类现在将绑定到 uri 中的值 检出此问题