我正在使用asp.net web-api并尝试捕获两种情况:
参数和值绑定成功,但是当名称或值无效时,不会发生异常并传递null。
更多细节:
ModelState.IsValid
永远是真实的
我已经清除了所有格式化程序
使用GlobalConfiguration.Configuration.Formatters.Clear();
然后添加我继承的XmlMediaTypeFormatter,它设置XmlSerializer = true
此外,我正在为复杂类型
这是控制器方法签名:
public Messages GetMessages(int? startId = null, int? endId = null, DateTime? startDate = null, DateTime? endDate = null, int? messageType = null, string clientId = "", bool isCommentsIncluded = false)
有什么想法吗?
答案 0 :(得分:2)
创建一个类并装饰您要验证的属性。例如(显然,使用你自己的价值观)
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 checkout this question
中的值