【发布时间】:2016-12-22 11:25:01
【问题描述】:
我正在使用 HttpClient 在 ASP MVC 上创建 Instagram API 客户端,我正在尝试发出 get 请求,但它失败了,没有抛出异常或响应,也没有响应我的超时。这是我的代码:
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 上调用我的服务,我仍然会测试将控制器更改为异步任务
public class HomeController : Controller
{
private InstagramService IGService = new InstagramService();
public ActionResult About()
{
var apiCall = IGService.GetInstagramUser();
var model = apiCall.Result;
return View(model);
}
}
我在 Postman 上进行了测试,试图进行 API 调用,它确实有效,那么我在哪里未能捕捉到错误?
【问题讨论】:
-
代码是怎么调用的?确保您没有在调用堆栈上进行任何阻塞调用
-
@Nkosi 在这里,我添加了我打算如何调用方法的片段
-
检查 Stephen Cleary 的回答。我怀疑您正在对
apiCall.Result进行阻塞调用,这可能会导致死锁。将操作转换为使用 async/await
标签: c# asp.net asp.net-mvc