[英]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.