asp.net webapi控制器,返回类型实体或HttpResponseMessage

Eat*_*oku 11 asp.net-web-api

我想知道在我的ApiController中使用HttpResponseMessage作为返回类型有什么好处?比较直接返回键入的实体或集合.

我们试图确定一个实践,以保持我们正在进行的项目的一致性.

Dar*_*ler 13

HttpResponseMessage当您尝试将控制器层用作HTTP协议和内部.Net服务之间的转换时,返回非常有用.它允许直接控制HTTP有效负载和标头.它可以很容易地返回202,204,304,303响应.它可以轻松设置缓存标头.您可以明确控制响应的媒体类型.

通过返回一个对象,您可以有效地向架构中添加"不执行任何操作"层.考虑....

public Foo Get(int id) {
   return _fooRepository.GetFoo(id)
}
Run Code Online (Sandbox Code Playgroud)

这种方法的目的是什么?它增加了什么价值?至少在MVC领域,控制器具有匹配模型和视图的作用.

当您从APIController返回对象时,您必须使用一组特定于Web API/MVC的抽象来间接影响HTTPResponseMessage,并且在HTTP世界中没有相应的概念.Formatters,ActionFilters,ModelBinders,HttpResponseException都是基础结构,旨在允许框架在后台处理您的HTTP请求和响应消息.

直接返回HttpResponseMessage需要您的控制器方法完成返回所需HTTP消息所需的工作.

我不相信它会给你的应用程序增加任何复杂性,它只会使正在发生的事情变得可见.

这取决于您是否希望将Web API用作"通过HTTP远程对象"框架(在这种情况下,我还将查看ServiceStack),或者您是否希望利用HTTP作为应用程序协议.

  • 我完全同意,也许是为了分离为什么没有服务层(强类型方法)和 web 服务层(ASP.NET WEB API)的问题,所以服务层可以很容易地被 Winform、WPF、控制台和测试项目使用并公开作为 ASPNET WebAPi 的网络服务 (2认同)