应用程序应该从LoginUser()接收httpresponsemessage,但它没有响应。

    private void button1_Click(object sender, EventArgs e)
    {
        if (LoginUser(tUser.Text, Password.Text).Result.IsSuccessStatusCode)
        {
            Notifier.Notify("Successfully logged in.. Please wait!");

        }
        else
        {
            Notifier.Notify("Please check your Credential..");
        }
    }




    public async Task<HttpResponseMessage> LoginUser(string userid, string password)
    {
        string URI = "http://api.danubeco.com/api/userapps/authenticate";

        using (var client = new HttpClient())
        {
            client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("c291cmF2OmtheWFs");

            using (var response = await client.GetAsync(String.Format("{0}/{1}/{2}", URI, userid, password)))
            {
                return response;
            }
        }
    }




请帮忙!

最佳答案

您正在阻止UI线程并导致死锁。 From Stephen Cleary's blog(只需将GetJsonAsync替换为LoginUser方法,将GetStringAsync替换为client.GetAsync):


  所以这就是发生的事情,从顶级方法开始
  (用于UI的Button1_Click /用于ASP.NET的MyController.Get):
  
  
  顶级方法调用GetJsonAsync(在UI / ASP.NET上下文中)。
  GetJsonAsync通过调用HttpClient.GetStringAsync(仍在上下文中)来启动REST请求。
  GetStringAsync返回一个未完成的任务,指示REST请求未完成。
  GetJsonAsync等待GetStringAsync返回的任务。上下文被捕获,将用于继续运行
  稍后使用GetJsonAsync方法。 GetJsonAsync返回未完成的任务,
  指示GetJsonAsync方法未完成。
  顶级方法同步阻止GetJsonAsync返回的Task。这将阻塞上下文线程。
  …最终,REST请求将完成。这就完成了GetStringAsync返回的任务。
  GetJsonAsync的延续现在可以运行了,它等待上下文可用,以便可以在上下文中执行。
  僵局。顶级方法正在阻止上下文线程,等待GetJsonAsync完成,并且GetJsonAsync正在等待
  上下文是免费的,以便可以完成。
  


和简单的可用解决方案(也来自博客):


  
  在“库”异步方法中,尽可能使用ConfigureAwait(false)。
  不要阻止任务;一直使用异步。
  


第二种解决方案建议您将button1_Click更改为:

private async void button1_Click(object sender, EventArgs e)
{
    if ((await LoginUser(tUser.Text, Password.Text)).IsSuccessStatusCode)
    {
        Notifier.Notify("Successfully logged in.. Please wait!");

    }
    else
    {
        Notifier.Notify("Please check your Credential..");
    }
}

关于c# - GetAsync:不返回HttpResponseMessage,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36033532/

10-10 06:45