ASP.Net Web API请求URI错误
本文关键字:URI 错误 请求 API Net Web ASP | 更新日期: 2023-09-27 18:02:23
我有一个ASP。Net Web API通常工作得很好。我有一个Winforms客户端应用程序做GET请求。客户端应用程序在我们的公司网络上运行(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表单(不是一个双赢的形式客户端)。这是通过使用基本元标记来解决的。我不确定这是否解决了你的问题,但你可以试一试。
你可以这样使用HttpClient的base address(如果你还没有这样做的话):
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
}
}