在 MVC 应用程序中使用 httpclient [重复]
Posted
技术标签:
【中文标题】在 MVC 应用程序中使用 httpclient [重复]【英文标题】:Using httpclient in MVC application [duplicate] 【发布时间】:2013-12-17 05:24:57 【问题描述】:当我在控制台应用程序中调用以下函数时,它可以正常工作。但是当我将它添加到 MVC 控制器时,执行永远不会到达 JsonConvert 行。任何想法,我错过了什么。
调用代码
GetVersion(url).Result.FileVersion
方法
public static async Task<Version> GetVersion(string url, string hostHeader)
var client = new HttpClient();
if (!string.IsNullOrEmpty(hostHeader))
client.DefaultRequestHeaders.Host = hostHeader;
var version = await client.GetStringAsync(url);
var output = JsonConvert.DeserializeObject<Version>(version);
client.Dispose();
return output;
【问题讨论】:
你使用的是哪个 MVC 版本? MVC4、.net4.5、vs2012 【参考方案1】:你造成了僵局,就像我 explain on my blog 一样。默认情况下,await
捕获一个“上下文”(在本例中为 ASP.NET 请求上下文)并使用它来恢复 async
方法。 ASP.NET 请求上下文一次只允许一个线程进入,而您正在通过调用 Result
阻塞该线程,从而阻止 async
方法完成。
您的控制台应用不会死锁,因为它没有“上下文”,因此async
方法在线程池中恢复。
解决方法是改变调用代码来使用:
(await GetVersion(url)).FileVersion
【讨论】:
谢谢,这行得通。我会详细阅读您的博客以了解更多信息以上是关于在 MVC 应用程序中使用 httpclient [重复]的主要内容,如果未能解决你的问题,请参考以下文章
控制台应用程序 HttpClient 发布到 mvc web api
MVC4 中使用城堡温莎的 HttpClient 的生活方式
如何在使用 HttpClient 使用 Asp Net Web Api 的 Asp Net Mvc 中提供实时数据?
如何使用 .Net 4.0 中包含的 HttpClient 类将文件上传到在 IIS Express 中运行的 Asp.Net MVC 4.0 操作