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