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

时间:2013-04-09 19:30:07

标签: asp.net-web-api

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

我们正在努力确定一项实践,以便为我们正在开展的项目保持一致。

1 个答案:

答案 0 :(得分:13)

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

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

public Foo Get(int id) {
   return _fooRepository.GetFoo(id)
}

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

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

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

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

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