2016-11-08 59 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

相關問題