【发布时间】:2015-11-27 06:32:36
【问题描述】:
我有一个非常简单的模型:
public class FoobarGETRequestModel {
[Required]
public string Id { get; set; }
}
它被用于这样的绑定:
[HttpGet]
[ValidateModel] //This is a custom attribute for handling validation errors
public async Task<HttpResponseMessage> Foobar([FromUri]FoobarGETRequestModel model) {
...
}
如果我向/api/controller/foobar 发出请求(请注意,我没有提供Id 参数),ModelState.IsValid 属性始终返回 true(来自操作过滤器和上述方法)。
如何通过 URI 进行绑定并仍然利用框架 ModelState 验证?
编辑:这是ValidateModel 的样子:
if (actionContext.ModelState.IsValid == false) {
var responseObject = new FooApiExceptionResponse() {
Errors = actionContext.ModelState.Values.SelectMany(v => v.Errors).Select(e => e.ErrorMessage)
};
actionContext.Response = actionContext.Request.CreateResponse(HttpStatusCode.BadRequest, responseObject);
}
【问题讨论】:
-
所以你是说
Id属性没有被设置(即使在默认构造函数中?或者路由中的默认值?)并且模型状态仍然有效,尽管@987654330 @ 应该是null? -
@rdoubleui - 正确。其实从调试来看,
model对象其实是null。 -
ValidateModel长什么样子? -
@rdoubleui - 我用
ValidateModel更新了我的帖子。如您所见,它非常简单;只需从ModelState中获取错误并将它们放入对象中以进行响应。 -
如果您说
model对象为空,那么还有一个问题需要先解决,不是吗?
标签: asp.net asp.net-web-api asp.net-web-api2