有没有人在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();
}
}
任何示例,类,模式,关键字 - 任何事情都有利于开始
答案 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)
您的控制器不应该相互调用,基本上控制器应该只验证输入,将调用委托给其他服务或域类,然后将输出发送给调用者。 如果两个控制器之间存在共享功能,那么它应该在一个单独的类中,并且两个控制器都将调用相同的方法