【问题标题】:Call an API controller from another API controller从另一个 API 控制器调用 API 控制器
【发布时间】:2017-10-14 00:56:29
【问题描述】:

注意:请不要将其作为副本注销。请仔细阅读我的完整问题。

我有 2 个 Web API 控制器 A 和 B。我需要在控制器 A 的一个方法中从控制器 B 调用一个方法。在执行了一些操作之后,我需要它发生。

class AController : ApiController{
    public IHttpAction SomeMethod(){
        //some action I need to finish before the call for Controller B

        //Call for Controller B
    }
}

class BController : ApiController{
    public IHttpActionResult AnotherMethod(){
        //Some code that I want to be executed after the code in Controller A
    }
}

请不要建议我创建另一个具有通用功能的类,这是我在寻找解决方案时通常在网络上找到的解决方案。我没有通用功能。我只想以线性方式执行代码。一个接一个地。希望我已经清楚了。任何帮助将不胜感激。

【问题讨论】:

  • 控制器 A 需要调用控制器 B 并且它们在同一个项目中的事实,那么控制器 B 中所做的任何事情都被认为是常见的,因为控制器 A 也需要调用它。您在搜索中看到该常见建议是有原因的。将控制器 B 中的功能提取到一个类中,该类可以注入到控制器 A 中并让它调用该函数。除了创建一个 HttpClient 并为控制器 B 调用端点之外,别无他法。

标签: c# asp.net-mvc asp.net-mvc-4 asp.net-web-api


【解决方案1】:

惯用的方法是通常在控制器中放置尽可能少的功能,而只是让控制器充当调用“业务层”的端点。

这减少了与 Web API 的耦合,并让您可以灵活地将多个不同的端点进入您的系统,例如无论出于何种原因,您都可能决定需要一个 WCF 端点。 Web API 可能不会永远存在,如果您将系统紧密耦合到 Web API 中,您会很头疼。

【讨论】:

  • 确实是正确的答案,除了 WCF 战胜 Web API 的例子:)
【解决方案2】:

你在控制器 A 上试过了吗

new ControllerB().AnotherMethod()

【讨论】:

  • 这本身还不够。当 Web API 初始化控制器时,它会设置诸如 Request 属性之类的东西,这些属性由用于创建响应的基类方法使用。
  • 这不是一个好习惯。您通过更新它使您的控制器类依赖于 ControllerB。
猜你喜欢
  • 2017-03-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多