如何捕获 Web API URI 参数绑定错误
本文关键字:参数 绑定 错误 URI API 何捕获 Web | 更新日期: 2023-09-27 18:30:39
我正在使用 asp.net web-api并尝试捕获2种情况:
- 传递未定义的 Uri 参数
- 传递了 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)
有什么想法吗?
创建一个类并修饰要验证的属性。例如(显然,使用您自己的值)
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 中的值 检出此问题