C# 没有';在MVC应用程序中,无法从HttpClient的GetAsync API获取响应
我面临一个问题,即在MVC应用程序(目标框架-.NETFramework 4.7)中无法从HttpClient的GetAsyncAPI获得响应,而在web服务和控制台应用程序中使用相同的代码片段获得响应。这里我附上了我正试图执行的代码片段C# 没有';在MVC应用程序中,无法从HttpClient的GetAsync API获取响应,c#,entity-framework,httpclient,C#,Entity Framework,Httpclient,我面临一个问题,即在MVC应用程序(目标框架-.NETFramework 4.7)中无法从HttpClient的GetAsyncAPI获得响应,而在web服务和控制台应用程序中使用相同的代码片段获得响应。这里我附上了我正试图执行的代码片段 public void Get() { var response = Gettasks().Result; } public static async Task<HttpResponseMessage> GetTasks() {
public void Get()
{
var response = Gettasks().Result;
}
public static async Task<HttpResponseMessage> GetTasks()
{
var response = new HttpResponseMessage();
try
{
using (var client = new HttpClient())
{
response = await client.GetAsync("https://www.google.com");
}
}
catch (Exception exception)
{
Console.WriteLine(exception.Message);
}
return response;
}
public void Get()
{
var response=Gettasks().Result;
}
公共静态异步任务GetTasks()
{
var response=新的HttpResponseMessage();
尝试
{
使用(var client=new HttpClient())
{
response=wait client.GetAsync(“https://www.google.com");
}
}
捕获(异常)
{
Console.WriteLine(异常消息);
}
返回响应;
}
我在response=wait client.GetAsync(“https://www.google.com"); 执行此语句后,该行将被删除,并且没有得到任何响应
如果有人可以建议解决方案或提供适合您的修复/解决方案。您将看到一个新的解决方案
最好的修复方法是移除阻塞:
public async Task Get()
{
var response = await Gettasks();
}
发生此死锁的原因是,ASP.NET(pre-Core)具有一个一次只允许一个线程的上下文,并且代码在该上下文中阻塞了一个线程(.Result
),这会阻止gettask
完成
要看到这种死锁,上下文和阻塞都是必要的。在其他场景中,没有上下文,因此不会发生死锁。由于ASP.NET(pre-Core)有一个上下文,因此这里的正确解决方案是删除阻塞。不确定您是否尝试过以下内容,这些内容对我有用
using (HttpClient client = new HttpClient())
{
client.BaseAddress = new Uri(Environment.GetEnvironmentVariable("BaseAddress"));
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
var requestUri = Environment.GetEnvironmentVariable("Uri");
HttpResponseMessage response = await client.GetAsync(requestUri);
if (response.IsSuccessStatusCode)
{
var data = await response.Content.ReadAsStringAsync();
}
}
错误消息是什么?听起来像是死锁,您可以尝试:
response=wait client.GetAsync(“https://www.google.com“”。配置等待(错误)代码>@AliK API调用没有返回错误。请尝试使用Net 4.7.2或更高版本。4.7.2中有针对TLS问题的修复。如果没有错误,您如何知道它不工作?检查响应是否为空,在这种情况下,响应不起作用。检查返回的响应状态代码,如果为200,则为工作状态。