11

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

由于 WebAPI 是网络友好的,因此可以使用 javascript 直接从客户端使用它。但是我会担心这会很快变得混乱,并且 javascript 不是最简单的单元测试技术。

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

我想上述两种方法可以结合使用,但我担心这会变得混乱。您是否同意采用一种方法或另一种方法会更好?

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

想法?

4

2 回答 2

17

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

是的,一点没错。只是这段代码不应该放在你的控制器中,而应该放在你的 DAL 层中,因为控制器不应该知道数据来自哪里(平面文件、数据库、Web API ......)。

所以有2种方法:

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

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

于 2012-07-16T12:01:27.337 回答
1

我认为您有一个 MVC 项目,并且您正试图将 api 操作从 MVC 项目中分离到一个单独的 web api 项目中?如果是这种情况,您必须在开始创建单独的服务项目之前权衡收益。

一旦你创建了一个单独的 web api 项目,那么由于跨域障碍,你不能轻易地直接从你的 MVC 项目中的 javascript 使用服务方法(当然有 JSONP 和 CORS,但它们并不那么容易),所以你必须依赖HttpClient类在你的控制器中创建不必要的包装方法来与服务通信。

当您的视图需要 api 方法提供的数据时,值得考虑在同一个 MVC 项目中使用 api 东西,但唯一的事情是您必须ApiController使用Controller.

于 2012-07-16T12:55:45.440 回答