1

我正在使用 asp.net web api,我不知道我是否做错了什么,但由于某种原因,我发现使用 DataAnnotations 来验证 WebApi 与 MVC 的难度要大得多。

例如,如果我想在非字符串上使用所需的验证器,我必须使用带有 IsRequired 的 DataContract,我发现这会增加混乱。

我还发现,如果数据注释无法验证我真的没有收到错误消息(RestSharp 认为一切都很好)。

我想知道人们是否在 WebApi 中使用 DataAnnotations 以外的任何东西?我知道在 MVC 中有适用于 .net 的 Fluent Validation,但不确定它是否适用于 WebApi。

编辑

根据评论中的链接,我有点困惑。

在第一部分他们有这个


if (ModelState.IsValid)
{
    // Do something with the product (not shown).

    return new HttpResponseMessage(HttpStatusCode.OK);
}
else
{
    return Request.CreateErrorResponse(HttpStatusCode.BadRequest, ModelState);
}

我认为 Request.CreateErrorResponse(HttpStatusCode.BadRequest, ModelState);会将所有模型状态错误发回。

但后来它去了

处理验证错误

验证失败时,Web API 不会自动向客户端返回错误。由控制器操作来检查模型状态并做出适当的响应。

我对上面的行感到困惑,就像我说我认为 CreateErrorResponse 正在处理它一样。

4

1 回答 1

2

关于 [DataContract(IsRequired=true)] 的问题,SO 本身有一些帖子描述了为什么需要它(安全问题)以及为什么不再需要它(错误)。供参考:需要验证数据合同和数据成员

您只需依赖 DataAnnotation 属性即可从 Web Api Config 中删除 InvalidModelValidatorProvider,如下所示:

config.Services.RemoveAll(typeof(ModelValidatorProvider), (provider) => provider is InvalidModelValidatorProvider);

其实你是对的,这条线

return Request.CreateErrorResponse(HttpStatusCode.BadRequest, ModelState);

会将您的验证错误发送回客户端。您引用的摘录的意思是您必须在控制器的操作主体或验证过滤器中编写此行。

希望能帮助到你。

于 2013-11-29T09:15:47.537 回答