0

我有一个 ASP.NET MVC 4 应用程序,它需要将现有 API 用于不同的服务。很明显,ApiController 的返回数据和常规控制器的返回视图

我需要某种形式的 RESTful API 来连接外部 API,以实现 Javascript 功能,但我的操作(呈现视图)需要调用外部 API。简而言之,我的控制器操作调用 JavaScript 的 API 都需要调用一个通用的外部 API。

我的问题是:我如何构建它,以便我的操作和 JS API 使用通用接口进行调用?

到目前为止我的两个想法:

  1. 为每个实体创建一个ApiController。然后这些 ApiController 调用外部 API。然后,我的 Javascipt 可以调用这些 ApiController,并且在我的操作中,我可以根据需要创建每个 ApiController 的实例并调用它们的方法(GET、POST、PUT 等)。这听起来很骇人吗?
  2. 将所有业务逻辑放入模型对象中,然后调用外部 API。要向 Javascript 公开某些方法,请提供一些 HTTP 端点,并且 Javascript 传递要调用的操作的名称,该操作调用模型方法,然后调用外部 API。

这些听起来比另一个更“正确”吗?还是这只是另一种过度担心并“随心所欲”的情况?这里的目标只是以 Javascript和我的控制器操作可以访问的通用方式调用一些外部 API 。

4

2 回答 2

1

我将创建一个 API 控制器,作为您的域和外部 Web 服务之间的桥梁。现在,您的标准 MVC 控制器和 javascript 都将使用此 API 控制器。这里的问题是你是否可以使这个 API 控制器通用,这样它就可以避免你需要为每个实体创建一个 API 控制器但使用相同的控制器。这样可以避免重复。这是否可能当然取决于您的确切情况。

于 2012-09-10T13:53:48.643 回答
0

我如何构建它,以便我的操作和 JS API 使用通用接口进行调用

我将介绍一个ApiController底层,它执行您的外部 API 和返回数据的 MVC 应用程序之间的所有底层通信。然后在您的视图控制器中更新操作以处理通过 AJAX 访问或不通过 AJAX 访问的场景,例如

public ActionResult MyAction(...)
{
    // contact middle-ware controller
    ...
    // handle response
    if (Request.IsAjaxRequest()) {
        return Json(...); // JS specific response
    } else {
        return View() // view specific response
    }
}

这使您的 API 在客户端和服务器端保持一致。您可能可以使用自定义属性做一些聪明的事情,该属性可以处理响应类型,这将减少您所有操作中的代码重复。

于 2012-09-10T14:01:52.897 回答