所以這是我的情況...
我有一個單元測驗專案,我在其中實體化了一個 Web API 控制器。單元測驗專案和 ASP.NET Web API 專案都在同一個解決方案中。Web API 控制器的實作包括將 HttpClient.PostAsync 呼叫到另一個解決方案中并部署到本地 IIS 的另一個 Web API 的部分。
呼叫方方法的專案和部署到 IIS 的專案都在 Visual Studio 中打開(打開了 2 個 VS 視窗)。我已經將部署到 IIS 的解決方案中的 pdb 和所有內容復制到單元測驗專案的 bin/debug 檔案夾中。
但是每次控制元件轉到 PostAsync 呼叫時,當我按 F11 時,它都不會進入在另一個 VS 編輯器中打開的代碼。
我可以知道我將如何實作這一目標嗎?
單元測驗專案:
[TestMethod]
public void TestController
{
TestController t = new TestController();
t.Get();
}
測驗控制器:
[HttpPost]
public ActionResult Get()
{
//assume that HttpClient.BaseAddress was already set in constructor
client.PostAsync("/testapi/getdata");
}
另一個解決方案中的控制器,部署在 IIS 中
[Route("testapi/getdata")]
[HttpPost]
public ActionResult Get()
{
//implementation here
}
uj5u.com熱心網友回復:
問題是您使用 Post 呼叫 API,但您的 Api 只接受 Get
client.PostAsync("/testapi/getdata");
///Controller in another solution, deployed in IIS
[Route("testapi/getdata")]
[HttpGet]
public ActionResult Get()
您可能必須更改 client.GetAsync 或者您可以使用 post 但更改 api。
當您使用 async 時,您必須使用 await 或 Result,但最好使用 await
awant client.GetAsync("/testapi/getdata")
//or
client.GetAsync("/testapi/getdata").Result;
///Controller in another solution, deployed in IIS
[Route("testapi/getdata")]
[HttpGet]
public ActionResult Get()
// but should be
public async Task<ActionResult> Get()
更新
你已經更新了你的問題,但在這之后它看起來更奇怪
[Route("testapi/getdata")]
[HttpPost]
public ActionResult Get()
對于沒有任何輸入引數和空請求正文的 getdata,您選擇 HttpPost。
client.PostAsync("/testapi/getdata");
它甚至不會被編譯,因為帖子需要內容。
我想知道 API 控制器是什么樣的。它也有屬性路由嗎?或者你所有的代碼都是假的?
uj5u.com熱心網友回復:
當另一個解決方案未處于除錯模式時,您無法在兩個解決方案之間共享 Visual Studio 中的除錯實體。
在 Visual Studio 本身內運行另一個解決方案(在一個單獨的實體中,在不同的埠上)并在請求應該命中的地方放置一個斷點 - Get()。
確保 API 在除錯模式下運行,而不是在任何要命中的斷點的發布模式下運行。
來自解決方案 1 的請求應該會在解決方案 2 中的控制器中命中斷點,并允許您根據需要進入請求。
PS 您不需要為此處理 PDB 檔案 - 您的問題是您如何運行第二個解決方案/API。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/332682.html
標籤:C# asp.net asp.net核心 asp.net-web-api
上一篇:放置,洗掉方法不起作用。錯誤:HTTP/1.1405方法不允許
下一篇:在MVC中處理DB中沒有的欄位
