C# ASP.NET MVC操作和Javascript需要调用相同的API

C# ASP.NET MVC操作和Javascript需要调用相同的API,c#,asp.net,asp.net-mvc,C#,Asp.net,Asp.net Mvc,我有一个ASP.NET MVC 4应用程序,它需要使用现有的API来提供不同的服务。很明显,ApicController的返回数据和常规控制器的返回视图 我需要某种形式的RESTful API来连接外部API,以实现Javascript功能,但我的操作(呈现视图)也需要调用外部API。简而言之,我的控制器操作和JavaScript调用的API都需要调用公共的外部API 我的问题是:我如何构建它,以便我的操作和JSAPI使用公共接口进行调用 到目前为止,我有两个想法: 为每个实体创建一个ApiCo

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

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

我的问题是:我如何构建它,以便我的操作和JSAPI使用公共接口进行调用

到目前为止,我有两个想法:

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

  • 这两个词中有一个听起来比另一个更“正确”吗?或者这仅仅是另一种过度担忧和“随心所欲”的情况?这里的目标只是以Javascript和我的控制器操作可以访问的常见方式调用一些外部API。

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

    我如何构建它,以便我的操作和JSAPI使用公共接口进行调用

    我将介绍一个低级的
    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在客户端和服务器端保持一致。您可能可以使用一个定制属性做一些聪明的事情,该属性可以处理响应类型,从而减少所有操作中的代码重复