C# 如何捕获web api uri参数绑定错误?
我正在使用asp.net web api并尝试捕捉两种情况:C# 如何捕获web api uri参数绑定错误?,c#,asp.net-web-api,C#,Asp.net Web Api,我正在使用asp.net web api并尝试捕捉两种情况: 传递了一个未定义的Uri参数 传递了Uri参数的无效值 参数和值绑定成功,但当名称或值无效时,不会发生异常并传递null 更多详细信息: ModelState.IsValid始终为真 我已清除所有格式化程序 使用GlobalConfiguration.Configuration.Formatters.Clear() 然后添加继承的XmlMediaTypeFormatter,它设置XmlSerializer=true 此外,我还为复杂类
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)
有什么想法吗?创建一个类并修饰您希望验证的属性。例如(显然,使用你自己的价值观)
创建一个过滤器,这样就不必在每个控制器中都使用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中的应用程序_Start()
GlobalConfiguration.Configuration.Filters.Add(new ValidationFilter());
希望这有帮助
更新
您的模型类现在将绑定到uri签出中的值谢谢,但我不确定我是否理解您的解决方案如何将其用于传递uri的简单类型,请使用此单一类而不是简单类型?我不知道代码中发生了什么变化,但我现在正在正确更新ModelState.IsValid。正如您所建议的,了解另一种方法很好,但它不适用于检测任何拼写错误的参数
GlobalConfiguration.Configuration.Filters.Add(new ValidationFilter());
public Messages GetMessages([FromUri] ModelViewModel model)