问题

  想要 ASP.NET Web API 执行模型验证,同时可以和 ASP.NET MVC 共享一些验证逻辑。

解决方案

  ASP.NET Web API 与 ASP.NET MVC 支持一样的验证机制,都是通过System.ComponentModel.DataAnnoataions 的属性验证。使用框架提供的相关验证属性,已足够来用来验证模型。

想要更细粒度的验证,我们可以选择在我们的模型中实现 IValudateObject(来自于System.ComponentModel.DataAnnotations)。如果所有的属性都验证通过,ASP.NET Web API 将会调用接口的Validate 方法,在这里我们可以进行更进一步的进行实体验证。这是和 MVC 里面的行为一样,并且,我们甚至可以在 Web API 和 MVC 中使用同一个 DTO。

  还有另一种方法,就是可以使用一个叫做 FluentValidation(NuGet 中可以下载FluentValidation)的第三方程序库,他可以构建更强大的验证场景。在这样的情况下,我们仍然需在我们的模型中实现 IValidateObject 接口,同时需要依赖于FluentValidation 验证器,而不是内嵌的验证逻辑。

小提示 ASP.NET Web API 的验证行为在跨宿主机上是相同的。

工作原理

  为了从 HTTP 请求 Body 中读取的模型并执行验证,ASP.NET Web API 依赖于一个 IBodyModelValidator 的服务。接口的大致描述如清单 1-17 所示,然而,他是一个可替代的服务,正常情况下,默认实现(DefaultBodyModelValidator)足够我们使用,在HttpConfiguration 被设置为自启动。

清单 1-17. IBodyModelValidator 接口

我想了解如何学习

姓名:
手机:
留言: