2014-09-20 46 views
0

我有這樣的代碼:MVC GetAsync不工作,不拋出任何異常

public async Task<string> getToken() 
     { 
      string uri = "http://localhost/api/getToken"; 

      HttpClient client = new HttpClient(); 
      //client.BaseAddress = new Uri(uri); 

      string token = "asfd"; 
      string baseId = "asfasdf"; 
      string appVersion = "afsadf"; 

      string content = ""; 

      HttpResponseMessage response = null; 
      try 
      { 
       string url = string.Format("{0}?token='{1}'&baseId='{2}'&appVersion='{3}'", uri, token, baseId, appVersion); 
       //client.BaseAddress = new Uri(url); 
       response = await client.GetAsync(url, HttpCompletionOption.ResponseHeadersRead); 

       response.EnsureSuccessStatusCode(); 

       content = await response.Content.ReadAsStringAsync(); 

      } 
      catch (Exception ex) 
      { 

      } 


      return content; 
     } 

當我到達的時候是GetAsync稱爲VS關閉調試模式,並不會引發任何異常的行。 在服務器上,我在控制器(mvc web api)的操作中有斷點,並且沒有到達。 但是,當我複製url並將其過濾到控制器中的瀏覽器操作被調用時。 當我更改我的網址爲其他一些不正確的網址時,GetAsync會拋出捕獲的異常。 我的應用程序是在.net framework 4.5中,控制檯應用程序。 也許我必須添加任何DLL?

+0

你嘗試把一個斷點在漁獲物和語句上調用GetAsync後?你使用哪個版本的VS? – 2014-09-20 10:48:09

+0

你從哪裏打這個電話?控制檯應用程序? – 2014-09-20 11:19:53

回答

1

您可能並未等待異步操作完成。這就是爲什麼它會調用aysnc,該方法將返回表示該操作的任務,然後應用程序結束。

您需要await任務getToken返回使用await getToken()。如果從main方法調用getToken,不能爲async你需要使用Task.Wait等待同步:

static void Main() 
{ 
    getToken().Wait(); 
}