C# 控制器中的方法在httpClient.SendAsync(请求)处停止;ASP.NET
我试图从网页调用控制器中的方法。但是,当代码运行时,它将停止在httpClient.SendAsync(请求);。永远不会超过这一点。 它可以在.net控制台应用程序中正常工作,但在ASP.net web应用程序中则不行 这是我的方法:C# 控制器中的方法在httpClient.SendAsync(请求)处停止;ASP.NET,c#,asp.net,.net,asynchronous,model-view-controller,C#,Asp.net,.net,Asynchronous,Model View Controller,我试图从网页调用控制器中的方法。但是,当代码运行时,它将停止在httpClient.SendAsync(请求);。永远不会超过这一点。 它可以在.net控制台应用程序中正常工作,但在ASP.net web应用程序中则不行 这是我的方法: public static async Task<Employee> LoadData(int ID) { using (var httpClient = new HttpClient()) { using (var
public static async Task<Employee> LoadData(int ID)
{
using (var httpClient = new HttpClient())
{
using (var request = new HttpRequestMessage(new HttpMethod("GET"), "https://api.example.net/api/GetData"))
{
request.Headers.TryAddWithoutValidation("Authorization", "Basic TOKEN HERE");
var response = await httpClient.SendAsync(request);
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
JObject o = JObject.Parse(responseBody);
JToken t = o.SelectToken("$.value[?(@.Id == " + "'" + ID + "'" + ")]");
string a = t.ToString();
Employee e = JsonConvert.DeserializeObject<Employee>(a);
return e;
}
}
}
非常感谢您的帮助。您有两种选择: 使用等待
LoadData
完成,然后返回值。(警告:它调用异步LoadData
并同步阻塞,因此它根本不是异步的,也可能导致死锁。)
或者您可以将Test()
方法更改为async
:
public async JsonResult Test()
{
//...
}
当您尝试向此Url发送请求时,我看到操作名称为
Test
:https://api.example.net/api/GetData它是GetData
而不是Test
您的LoadData(int-ID)方法是异步的,因此您的Test()方法也应该是异步的。您需要等待Api.LoadData(507)的调用;代码>和现在一样,您在方法完成之前返回。谢谢各位,真的帮助了谢谢,令人惊讶的是欢迎您,请单击复选标记将答案标记为已接受,以便帮助其他人。
public JsonResult Test()
{
try
{
Api.LoadData(507).GetAwaiter().GetResult();
return Json(true, JsonRequestBehavior.AllowGet);
}
catch (Exception ex)
{
return Json(false, JsonRequestBehavior.AllowGet);
}
}
public async JsonResult Test()
{
//...
}