.net - 从 MVC Controller 调用 WEB API 服务是反模式吗?

标签 .net asp.net-mvc asp.net-web-api

如果决定使用 WebAPI 创建一个服务层以供各种客户端使用。构建 Web 客户端的最佳方法是什么?

由于 WebAPI 是网络友好的,因此可以使用 JavaScript 直接从客户端使用它。然而我担心这会很快变得困惑,并且 javascript 并不是最容易进行单元测试的技术。

另一种方法是使用 HttpClient 类从 MVC Controller 调用 REST 服务。这是一种有效的方法吗?

我认为上面的两种方法可以结合起来,但我担心这会变得困惑。您是否同意采用一种方法或另一种方法更好?

抱歉,我看过很多关于是否使用 WebAPI 还是 MVC 的帖子,但没有看到关于将两者结合起来的帖子。

想法?

最佳答案

An alternative would be to use the HttpClient class to call the REST services from MVC controllers. Is this a valid approach?

是的,绝对。只是这段代码不应该放在 Controller 中,而应该放在 DAL 层中,因为 Controller 不应该知道数据来自哪里(平面文件、数据库、Web API,...)。

所以有两种方法:

  • 您决定使用 HTTP 协议(protocol)从 MVC 客户端应用程序使用 Web API。在本例中,您为存储库(DAL 层)创建一个实现,它将使用 HTTP 客户端并直接返回域模型
  • 您决定直接使用此 Web API 中包含的服务,而不发送 HTTP 请求。在这种情况下,您在 MVC 客户端应用程序中引用包含 Web API 服务层的程序集,并且该程序集直接成为 MVC 应用程序的服务层。在这种情况下,Web API 通过 HTTP 为其他客户端提供服务:javascript、移动设备……

您选择哪种方法实际上取决于您的具体场景和要求。您是否需要支持 MVC 客户端应用程序之外的可互操作客户端?无论如何,首先在包含域模型和内容的单独程序集中定义服务层。然后,您始终可以通过 Web API(或 WCF 服务或其他服务)公开此服务层,或直接从 .NET 客户端引用它。

关于.net - 从 MVC Controller 调用 WEB API 服务是反模式吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11502901/

相关文章:

c# - 如何让 WebAPI 在不使用 C# 属性的情况下接受复杂对象作为 DELETE HTTP 动词的参数?

facebook - ASP.NET Web API 和使用 Facebook 登录的身份

c# - XmlSerializer 在 .net framework 和 .net core 上与属性的私有(private) getter 行为不同

javascript - 将 AngularJS 模型发布到 ASP.NET MVC Controller 中的复杂模型

c# - 如何使用 { get; 访问私有(private)变量放; }

c# - 使用 OData Web Api 对数据传输对象进行嵌套筛选

.net - 用于非游戏相关 3D 图形编程的托管 Direct3D 或 XNA?

c# - 在 C# 中,为什么接口(interface)实现必须显式实现方法的另一个版本?

html - 在VB2010中有什么简单的方法可以为单个单词添加颜色?

jquery - 在页面加载时保持树状菜单打开