在WebAPI之前,我使用常规MVC操作方法完成了所有客户端远程验证调用。使用WebAPI,我现在可以在ApiController上使用POST,PUT,DELETE和GET方法。但是,验证仍然需要进行。
我已经成功地将远程验证操作方法放在ApiController上并让它们工作。在为资源提交POST,PUT或DELETE之前,客户端可以POST到一个或多个验证URL以验证用户输入并接收适当的验证消息。
我的问题是,这些远程验证操作是否应该在ApiController上?还是常规的MVC控制器?在我看来,ApiController中的所有内容都是最有意义的,因为该类可以封装与资源(和资源集合)突变有关的所有内容。
更新:回复@tugberk
我应该详细说明。首先,我们没有使用DataAnnotations验证。使用FluentValidation.NET在域层命令上配置了丰富的验证规则和消息。许多验证类使用依赖注入来调用数据库(例如,验证唯一性)。 FluentValidation与MVC ModelState具有良好的可插拔性,但I have not found a good way to plug it into WebAPI ModelState yet。
其次,我们正在POST,PUT和DELETE端点进行验证。客户端不需要知道验证端点以发现出错的地方。这是一个例子:
var command = Mapper.Map<CreateCarCommand>(carApiModel);
try
{
_createHandler.Handle(command);
}
catch (ValidationException ex)
{
return Request.CreateResponse(HttpStatusCode.BadRequest, ex.Message);
}
客户将获得400响应以及指示出错的消息。当然,这不像您链接的示例中的响应那么精细。因为我们只是返回一个字符串,所以没有简单的方法来解析每个验证消息所属的字段,这是我们自己的API的HTML + javascript客户端所需要的。这就是为什么我匆匆添加更多粒度验证端点(作为旁注,它们被我们的javascript客户端上的字段特定的敲除验证调用所消耗)。
答案 0 :(得分:0)
我假设您通过说远程验证来引用类似于ASP.NET MVC远程验证的内容。在这种情况下,我认为您的HTTP API不需要远程验证。想想我需要在.NET应用程序中使用HTTP API并假设您进行远程验证的场景。这里有两件事困扰我:
在我看来,用户向您的API发送请求,您应该在那里进行验证。您可以从以下URL中找到示例: