我有一个c#控制台程序,它使用webrequest调用库方法可以正常工作,但是当我从另一个程序(一个mvc站点)调用相同的库方法时,它只是挂起了。即使我给它一个超时值,它也永远不会超时。
console app:
console project
bitly project
mvc site
web server project
bitly project
我已经验证了它与控制台应用程序中相同的值是否可以正常工作,但是只是将其与Web代码一起放在那里。
var url = $"https://api-ssl.bitly.com/v3/shorten?access_token={apikey}&longUrl={WebUtility.UrlEncode(longUrl)}";
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
try
{
var response = await request.GetResponseAsync();
using (var responseStream = response.GetResponseStream())
{
response.Timeout = 30000
var reader = new StreamReader(responseStream, Encoding.UTF8);
var jsonResponse = JObject.Parse(await reader.ReadToEndAsync());
var statusCode = jsonResponse["status_code"].Value<int>();
if (statusCode == (int)HttpStatusCode.OK)
...
}
}
这是在我创建的bitly.library项目中。该库仅使用newtonsoft nuget包。如果有问题,调用程序都使用相同版本的system.net.http。
我已验证两个程序最终都使用相同的URL。
当我从控制台应用程序调用它时,GetResponseStream()调用立即随数据一起返回。当我从webhook调用它(适用于短信系统)时,GetResponseStream()会永远挂起。
我也在两台不同的计算机上尝试过。
我唯一的线索是超时似乎从未起作用,这让我觉得Web服务器解决方案中的webrequest库有问题。但是因为它都不使用nuget包,所以我迷失了。
答案 0 :(得分:0)
我最终将代码切换为使用HttpClient而不是WebRequest,问题得以解决。
我不确定为什么WebRequest会这样,但是现在工作正常。