![](/img/trans.png)
[英]how do i authenticate 3rd party user to access my web API asp.net?
[英]The web server hangs while calling 3rd party Web API from my Web API
當我運行該行時,我需要從我的ASP.net Web API調用3方Web Api
HttpResponseMessage response = await client.PostAsJsonAsync("api/ArTrx/postDocument", poMaster);
Web服務器掛起。 我試圖將下面的代碼放入控制台程序,它運行良好。 在ASP.net Web API項目中運行時,下面的代碼有什么問題?
client.BaseAddress = new Uri(webAPIAddress);
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
string token = Crypto.EncryptStringAES("abcd1234");
client.DefaultRequestHeaders.Add("X-Token", token);
HttpResponseMessage response = await client.PostAsJsonAsync("api/ArTrx/postDocument", poMaster);
if (response.IsSuccessStatusCode)
{
...
}
您可能有一個Task<T>.Result
Task.Wait
或Task.Wait
進一步調用您的調用堆棧。 這將導致我在我的博客上更詳細描述的ASP.NET死鎖 。
總之, await
將捕獲一個“上下文” - 在本例中是一個ASP.NET請求上下文,它一次只允許一個正在運行的線程。 當等待完成時(即POST結束時), async
方法將在該上下文中繼續。 如果您的代碼阻塞了調用堆棧(例如, Result
或Wait
),那么它將阻止該ASP.NET請求上下文中的線程,並且async
方法無法進入該上下文以繼續執行。
您沒有在控制台應用程序中看到死鎖,因為沒有捕獲上下文,因此async
方法在線程池線程上恢復。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.