C# 控制器中的方法在httpClient.SendAsync(请求)处停止;ASP.NET

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

我试图从网页调用控制器中的方法。但是,当代码运行时,它将停止在httpClient.SendAsync(请求);。永远不会超过这一点。 它可以在.net控制台应用程序中正常工作,但在ASP.net web应用程序中则不行

这是我的方法:

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()
{
    //...
}