Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 没有';在MVC应用程序中,无法从HttpClient的GetAsync API获取响应_C#_Entity Framework_Httpclient - Fatal编程技术网

C# 没有';在MVC应用程序中,无法从HttpClient的GetAsync API获取响应

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() {

我面临一个问题,即在MVC应用程序(目标框架-.NETFramework 4.7)中无法从HttpClient的GetAsyncAPI获得响应,而在web服务和控制台应用程序中使用相同的代码片段获得响应。这里我附上了我正试图执行的代码片段

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,则为工作状态。