2016-11-08 62 views
3

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

下面的代码最合适的方式将http请求发送到同一服务中的不同控制器?

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

它似乎相当有效,因为它是一个普通的HTTP,它不是真的很重要,如果它是localhost或不是。但是我真的会建议你不要那样做,但要重用共享服务中的通用逻辑,如下所述。 –

回答

2

是的,这将是一个合适的方式来调用它。

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

在附注上 - 你可能想要对URI字符串做一些事情,这样它就不会全部硬编码。

4

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

例如:

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

我宁愿添加一个ISomeService并依赖它并将其注入控制器的构造函数中,除了共享逻辑。 –

+0

的确如此,我只是简短了 –

+0

正如在OP中大致提到的,我知道通过接口或静态方法等来重构代码的方法......但这不是我想在此使用的方法。 – rysama

相关问题