c# - ASP HttpClient GetAsync 没有响应,也没有超时

标签 c# asp.net asp.net-mvc

我正在使用 HttpClient 在 ASP MVC 上创建一个 Instagram API 客户端,我试图发出一个获取请求,但它失败了,没有抛出异常或响应,也没有响应我的超时。这是我的代码:

 public class InstagramService
 {
    private HttpClient Client = new HttpClient {
       BaseAddress = new Uri("https://api.instagram.com/v1/"),
       Timeout = TimeSpan.FromMilliseconds(500)
    };
    public async Task<InstagramUser> GetInstagramUser(long? userId = null)
    {
       InstagramUser User = null;
       string Parameter = (userId == null) ? "self" : userId.ToString();
       try {
          var response = await Client.GetAsync("users/" + Parameter + "/" + GetAccessToken());
          if (response.IsSuccessStatusCode)
          {
              User = await response.Content.ReadAsAsync<InstagramUser>();
          }
      }catch(Exception e)
      {
          Console.WriteLine(e.Message);
          Console.WriteLine(e.InnerException.Message);
      }
      return User;
    }

    private string GetAccessToken()
    {
        return "?access_token=" + DB.config_det_sys.Single(i => i.codigo == "ACCESS_TOKEN_INSTAGRAM" && i.estado == true).Valor;
    }

 }

编辑

这里我添加了我如何在 Home Controller 上调用我的服务,我仍然会测试将 Controller 更改为异步任务

public class HomeController : Controller
{
    private InstagramService IGService = new InstagramService();
    public ActionResult About()
    {
       var apiCall = IGService.GetInstagramUser();
       var model = apiCall.Result;
       return View(model);
    }
}

我在尝试进行 API 调用的 Postman 上进行了测试,它确实有效,那么我在哪里没有发现错误?

最佳答案

你的问题在这里:

var model = apiCall.Result;

正如我在我的博客中描述的那样,you shouldn't block on asynchronous code .它可能会导致死锁。

代替Result,使用await:

var model = await apiCall;

关于c# - ASP HttpClient GetAsync 没有响应,也没有超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41273126/

相关文章:

c# - 如何从 url 中删除 .aspx

asp.net-mvc - 如何在asp.net core mvc header 中传递jwt token

javascript - MVC Loop 内的表单在 Chrome 中自动提交

c# - 变量 backgroundWorker 参数总是一样的?

c# - 传递给 Controller ​​操作的参数

javascript - 设置列表框的滚动位置

c# - JWT 如何添加自定义声明和解码声明

angularjs - 我可以从 mvc 提供静态 html 页面吗

c# - 运行时程序集位置更改

c# - 将击键发送到其他控件