【发布时间】:2017-01-27 16:47:31
【问题描述】:
我正在使用 HttpClient 向 api 发出请求。此代码位于与两个附加项目(控制台和 Asp.Net Mvc 项目)共享的类库项目中。当我从控制台项目发出请求时,它工作得很好,但在 asp 项目中它阻塞在行
using(Stream responseStream = await response.Content.ReadAsStreamAsync()
这是我的请求代码
private async Task<dynamic> ReadJson(string url)
{
HttpResponseMessage response = await httpClient.GetAsync(url);
if (response.StatusCode == System.Net.HttpStatusCode.NoContent)
throw new RateLimitException();
if (response.StatusCode == System.Net.HttpStatusCode.Forbidden)
throw new AccessDeniedException();
if (response.StatusCode != System.Net.HttpStatusCode.OK)
throw new Exception("Error: " + response.StatusCode);
using (Stream responseStream = await response.Content.ReadAsStreamAsync())
using (StreamReader sr = new StreamReader(responseStream, System.Text.Encoding.UTF8))
{
string json = sr.ReadToEnd();
return JObject.Parse(json);
}
}
我正在从控制台和 Asp.Net 项目中对方法进行相同的调用。从控制台工作,但在读取响应内容时,asp .net 项目会阻塞在行中
【问题讨论】:
-
尝试像这样同步调用异步方法:
httpClient.Get(url);和response.Content.ReadAsStream()并告诉我是否仍然阻塞。 -
您还需要在MVC控制器
async中进行操作 -
@Alisson httpClient 没有 Get() 方法,并且 Content 没有 ReadAsStream()。我错过了一些命名空间?
-
显示调用
ReadJson函数的控制器动作 -
@AlexArt。我的控制器不是异步的,但我正在这样做: var task = ReadJson(...);任务.Wait();并使用任务的 Result 属性。为什么要使用异步控制器?
标签: asp.net-mvc api request console-application dotnet-httpclient