目前我們有一個通用的MVC方法GET的距離的ASP.NET Web API數據了HTTPClient GetAsync後對象
public static T Get<T>(string apiURI, object p)
{
using (HttpClient client = new HttpClient())
{
client.BaseAddress = new Uri(Config.API_BaseSite);
HttpResponseMessage response = client.GetAsync(apiURI).Result;
// Check that response was successful or throw exception
if (response.IsSuccessStatusCode == false)
{
string responseBody = response.Content.ReadAsStringAsync().Result;
throw new HttpException((int)response.StatusCode, responseBody);
}
T res = response.Content.ReadAsAsync<T>().Result;
return (T)res;
}
}
我們的問題是: - 顯然,我們不能派「P」,你會與一個職位,
client.PostAsync(apiURI, new StringContent(p.ToString(), Encoding.UTF8, "application/json")
但我們怎麼去發送這個對象/ JSON與一個get。 我們已經看到將它作爲URL的一部分發送,但是,還有其他選擇嗎?
在ASP.Net運行時主機下使用.Result會引起你一個痛苦的世界。 –
@達勒爾米勒請你詳細說明。有什麼問題使用這個? – Simon
ASP.Net運行時的Syncronization上下文只支持一次運行的單個線程,這就是爲什麼你可以訪問像HttpContext這樣的靜態。但是,當你這樣做的時候。結果會阻塞正在執行的線程。如果async方法中的任何代碼嘗試訪問HttpContext,則會導致死鎖。引用ASP.NET團隊的開發人員Brad Wilson「在ASP.NET管道中使用.Result或.Wait(或任何相關的)會導致死鎖,我保證。」 –