让WebAPI控制器向同一服务中的另一个控制器发送http请求

时间:2016-11-08 00:58:17

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

我有一个WebAPI服务,我希望它向自己发送一个http请求。我想确认最合适的做法是什么样的。 (通常,我只是实例化目标控制器的另一个实例或重构接口后面的代码然后以这种方式发出请求,但出于各种原因我不想使用该方法。)

下面的代码是否是在同一服务中向另一个控制器发出http请求的最合适方式?

using (HttpClient client = new HttpClient())
{
  var httpRequest = new HttpRequestMessage("GET", "https://localhost/SomeOtherController");
  return await client.SendAsync(httpRequest);
}

2 个答案:

答案 0 :(得分:5)

如果你需要调用另一个控制器,那意味着那里有一些共享代码。 最好的方法是将这段代码抽象到另一个类中,并在两个控制器中使用它。

例如:

public class SomeService
{
 public void DoSomeLogic()
 { 
 }
}

public class FirstController : ApiController
{
 public IHttpActionResult SomeAction()
 {
   new SomeService().DoSomeLogic();
 }
}

public class SecondController : ApiController
{
 public IHttpActionResult SomeOtherAction()
 {
   new SomeService().DoSomeLogic();
 }
}

答案 1 :(得分:2)

是的,这是调用它的合适方式。

如果您需要执行实际的HTTP请求,那么请求发送到同一服务中的控制器并不重要 - 它只是一个通用的HTTP请求。

旁注 - 您可能想要对该URI字符串执行某些操作,以便它不是全部硬编码。