[英]ASP.Net Web API Request URI Error
我有一個通常可以正常運行的ASP.Net Web API。 我有一個執行GET請求的Winforms客戶端應用程序。 客戶端應用程序在我們的公司網絡上運行(API托管為Azure網站)。 有時,而且不一致地,我進行的HttpClient調用在GET調用之前添加了似乎是公司URL的內容。
示例:我嘗試調用將HttpClient請求發送到以下URL:' 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;
}
}
我沒有答案為什么會這樣,但是我在Web表單中遇到了類似的問題(不是Win Forms客戶端)。 這可以通過使用基本的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
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.