我有一个使用 Web API 操作的异步方法。它似乎陷入了一个循环。我这样做的理由是,如果我在 catch 块的第 1 行设置一个断点并进入,它实际上永远不会到达第二行。
我最初返回一个包含 100,000+ (~30mb) 行的数据集,并认为由于请求的大小它可能会很慢,但是在将我的 Web API 操作更改为仅返回 1 行之后,问题仍然存在。当我浏览到 Web API 解决方案的 URI 时,肯定会返回数据,因为我在浏览器中返回了 JSON。
public async Task<IEnumerable<Document>> GetAll()
{
try
{
var response = await _client.GetAsync(
string.Format("{0}/api/document", _baseURI));
// never hits line below
return await response.Content.ReadAsAsync<Document>()
as IEnumerable<Document>;
}
catch (Exception ex)
{
// handle exception
}
}
我不确定我是否在这里遗漏了什么?一些帮助将不胜感激。
编辑 1
在回答一些问题时,我有一个 MVC 项目引用的 Web API 项目。我不得不对 JSON 反序列化的原始问题进行一些更改。
存储库:
public async Task<IEnumerable<Document>> GetAll()
{
try
{
string json;
var response = await _client.GetAsync(string.Format(
"{0}/api/document", _baseURI)).ConfigureAwait(false);
var resource = await response.Content.ReadAsAsync<Document>();
using(var reader = new StreamReader(resource.ToString()))
{
json = reader.ReadToEndAsync().ToString();
}
return JsonConvert.DeserializeObjectAsync<Document>(json)
as IEnumerable<Document>;
}
catch (Exception)
{
throw;
}
}
控制器:
public async Task<ActionResult> GetAll()
{
return PartialView("_GetAllDocumentsPartial", await _docRepo.GetAll());
}
通过以下答案中描述的更改,在进行上述调试时仍然会出现相同的问题。但是我得到“任务被取消”。存储库中方法中的 catch 异常。