2014-05-08 81 views
0

我有一個ASP.Net Web API,通常工作正常。我有一個Winforms客戶端應用程序,它執行GET請求。客戶端應用程序在我們的公司網絡上運行(API作爲Azure網站託管)。有時,並不一致,HttpClient調用我添加什麼似乎是我的GET調用前的公司URL。ASP.Net Web API請求URI錯誤

例子:我嘗試調用發送HttpClient的請求發送到以下網址:「http://xyzxyz.azurewebsites.net/api/user/1

,但取得的實際要求是:

'http://usgaabc1iru01/B0000D0000N0001F0000S0000R0004/http://xyzxyz.azurewebsites.net/api/user/1' 

這顯然會導致錯誤。

我問過我們的IT部門可能發生了什麼事情,他們很茫然。希望有人能指引我正確的方向。

編輯:

這是我使用的代碼。首先,我有一個靜態的方法,我稱之爲一切我做對API調用來獲取HttpClient的(是這樣的尷尬/壞也許):

public static HttpClient GetHttpClient() 
    { 

       var credentials = new NetworkCredential(GlobalVariables.CurrentUser.UserName, GlobalVariables.CurrentUser.Password); 
       HttpClientHandler handler = new HttpClientHandler(); 
       handler.UseDefaultCredentials = false; 
       handler.Credentials = credentials; 

       HttpClient client = new HttpClient(handler); 
       client.BaseAddress = new Uri(PublicClasses.GlobalVariables.BaseUriString); 
       client.DefaultRequestHeaders.Accept.Add(
         new MediaTypeWithQualityHeaderValue("application/json")); 
       GlobalVariables.CredentialedHttpClient = client; 
      } 
      return GlobalVariables.CredentialedHttpClient; 
     } 
    } 

這裏有一個簡單的GET調用我用:

public static List<Project> GetAllProjects() 
    { 
     try 
     { 

      HttpClient client = GetHttpClient(); 
      HttpResponseMessage response = client.GetAsync("api/project").Result; // Blocking call! 
      if (response.IsSuccessStatusCode) 
      { 
       var projects = response.Content.ReadAsAsync<IEnumerable<Project>>().Result; 
       return (List<Project>)projects; 
      } 
      else 
      { 
       Console.WriteLine("{0} ({1})", (int)response.StatusCode, response.ReasonPhrase); 
       return null; 
      } 

     } 
     catch (Exception) 
     { 

      throw; 
     } 
    } 

回答

0

我沒有答案,爲什麼會發生這種情況,但我遇到了類似的問題在網絡表單(而不是贏得表格客戶端)。這是通過使用基礎meta標籤解決的。我不確定這是否能解決您的問題,但您可以嘗試一下。

您可以使用HttpClient的基地址是這樣的(如果你是不是已經這樣做了):

using (var client = new HttpClient()) 
{ 
    client.BaseAddress = new Uri("http://xyzxyz.azurewebsites.net/"); 
    client.DefaultRequestHeaders.Accept.Clear(); 
    client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 

    HttpResponseMessage response = await client.GetAsync("api/user/1"); 
    if (response.IsSuccessStatusCode) 
    { 
     //add your code 
    } 
} 
+0

我的代碼相似,但略有不同。首先,我沒有把所有東西放在'使用'區塊中。我也沒有對默認的請求頭文件運行「清除」 - 看看我編輯的問題,並讓我知道如果你認爲你的代碼可能會呈現不同於我的結果。 – apierceSO