Web API 2 - 控制器之间的通信

时间:2017-03-13 13:54:06

标签: c# asp.net-web-api asp.net-web-api2

有没有人在Web API 2中的控制器之间进行通信?我们假设,我们正在网络区工作。

小例子:

public class ClassB : ApiController
{
   public HttpResponseMessage Get(string id)
   {
      // return some data
   }
}

public class ClassA : ApiController
{
    public HttpResponseMessage Post(string id)
    {
       // call ClassB - method Get
       // consume data from ClassB

       return Request.CreateResponse();
    }
}

任何示例,类,模式,关键字 - 任何事情都有利于开始

2 个答案:

答案 0 :(得分:0)

取决于控制器是同一app域的一部分还是分开的。如果它们是单独部署的,那么您需要使用httpclient调用ClassB.Get控制器。在下面

Http客户端

    using (var client = new HttpClient(handler))
        {                                            
            var response = await client.GetAsync("http://contoso.com/products/product1");
            var product= await response.Content.ReadAsAsync<Product>(new [] { new JsonMediaTypeFormatter() });

            // Add your logic here                                 
        }

    return this.Request.CreateResponse(HttpStatusCode.OK, data); 

代码重用

如果他们是同一app域的一部分,那么您可以通过提取单独的类来重用代码。根据您设计解决方案的方式,可以使用不同的设计方法。您可以使用DDD(domain driven design)的示例。提取域实体或服务中的逻辑(根据您的域更适合)并重用逻辑。

希望这有帮助。

答案 1 :(得分:0)

您的控制器不应该相互调用,基本上控制器应该只验证输入,将调用委托给其他服务或域类,然后将输出发送给调用者。 如果两个控制器之间存在共享功能,那么它应该在一个单独的类中,并且两个控制器都将调用相同的方法