ASP.NET WebAPI控制器:返回类型化实体或HttpResponseMessage

11

我希望了解在我的ApiController中使用HttpResponseMessage作为返回类型相比直接返回特定实体或集合的好处是什么?

我们正在尝试决定一种实践方法,以保持我们正在开发的项目的一致性。

1个回答

13

当你试图使用控制器层作为HTTP协议和内部.Net服务之间的翻译时,返回HttpResponseMessage很有用。它允许直接控制HTTP有效负载和标头。这使得返回202、204、304、303响应变得容易。还可以轻松设置缓存标头。你可以明确控制响应的媒体类型。

通过返回一个对象,你实际上向架构添加了一个“不执行任何操作”的层次。考虑一下...

public Foo Get(int id) {
   return _fooRepository.GetFoo(id)
}
这个方法的目的是什么?它有什么价值?至少在MVC中,控制器的作用是匹配模型和视图。
当您从APIController返回对象时,您必须间接影响HTTPResponseMessage,使用一组特定于Web API/MVC的抽象概念,并且在HTTP世界中没有相应的概念。格式化程序、ActionFilters、ModelBinders、HttpResponseException都是基础架构,旨在让框架在幕后处理您的HTTP请求和响应消息。
直接返回HttpResponseMessage要求您的控制器方法执行必要的工作才能返回所需的HTTP消息。
我不认为它会给应用程序增加任何复杂性,它只是使发生的事情可见。
问题归结为您是否想将Web API作为“HTTP上的对象远程调用”框架(在这种情况下,我还会查看ServiceStack),或者您想利用HTTP作为应用程序协议。

2
我完全同意,也许为了分离关注点,我们可以拥有一个服务层(强类型方法)和一个 Web 服务层(ASP.NET WEB API),这样服务层就可以轻松地被 Winform、WPF、Console 和测试项目所使用,并通过 ASPNET WebAPi 暴露为 Web 服务。 - riadh gomri

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接