我想知道在我的 ApiController 中使用 HttpResponseMessage 作为返回类型有什么好处?与直接返回类型化实体或集合进行比较。
我们试图决定一种做法,以使我们正在进行的项目保持一致。
我想知道在我的 ApiController 中使用 HttpResponseMessage 作为返回类型有什么好处?与直接返回类型化实体或集合进行比较。
我们试图决定一种做法,以使我们正在进行的项目保持一致。
HttpResponseMessage
当您尝试将控制器层用作 HTTP 协议和内部 .Net 服务之间的转换时,返回非常有用。它允许直接控制 HTTP 有效负载和标头。它可以轻松返回 202、204、304、303 响应。它使设置缓存标头变得容易。您可以明确控制响应的媒体类型。
通过返回一个对象,您可以有效地将“什么都不做”层添加到您的架构中。考虑....
public Foo Get(int id) {
return _fooRepository.GetFoo(id)
}
这种方法的目的是什么?它增加了什么价值?至少在 MVC 领域,控制器具有匹配模型和视图的作用。
当您从 APIController 返回对象时,您必须使用一组特定于 Web API/MVC 并且在 HTTP 世界中没有相应概念的抽象来间接影响 HTTPResponseMessage。Formatters、ActionFilters、ModelBinders、HttpResponseException 都是旨在让框架在幕后处理您的 HTTP 请求和响应消息的基础设施。
直接返回 HttpResponseMessage 要求您的控制器方法完成返回所需 HTTP 消息所需的工作。
我不相信它会给你的应用程序增加任何复杂性,它只是让正在发生的事情变得可见。
归结为您是否想将 Web API 用作“基于 HTTP 的对象远程处理”框架(在这种情况下,我也会看看 ServiceStack),或者您是否想利用 HTTP 作为应用程序协议。