1

我创建了一个简单的 web api,当我从 IE 访问它时,web api 完全返回了我的预期。但是,现在我尝试使用 httpclient 从 Web 表单应用程序访问相同的 Web api。但现在我收到 404 错误。但是 api 似乎可以工作,因为我在使用浏览器时确实收到了结果。任何想法出了什么问题?这是代码:

 HttpClientHandler handler = new HttpClientHandler()
 {
     UseDefaultCredentials = true
 };

 HttpClient client = new HttpClient(handler);
 client.BaseAddress = new Uri("http://server/appdir");
 client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

 HttpResponseMessage response = client.GetAsync("/api/environment").Result;
4

3 回答 3

2

这是有效的代码。

 HttpClientHandler handler = new HttpClientHandler()
 {
     UseDefaultCredentials = true
 };

 HttpClient client = new HttpClient(handler);

 client.BaseAddress = new Uri("http://eetmws10v");

 client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

 HttpResponseMessage response = client.GetAsync("/aim2/api/environment").Result;
于 2013-10-22T07:38:09.263 回答
1

哇。这个周末我遇到了同样的错误,我无法想象问题的原因是多么脆弱。

这对我有用:

string _baseAddress = "http://localhost/webapi/";
string controllerURL = "api/School";

client.BaseAddress = new Uri(_baseAddress);
string result = client.GetStringAsync("controllerURL").Result.ToString();

对我来说导致 404 错误的 _baseAddress 和 controllerURL 的组合如下:

string _baseAddress = "http://localhost/webapi/";
string controllerURL = "/api/School";

或者

string _baseAddress = "http://localhost/webapi";
string controllerURL = "api/School";

或者

string _baseAddress = "http://localhost/webapi";
string controllerURL = "/api/School";

我真诚地希望尽快采取一些措施来消除这种不必要的僵化,这种僵化可能会浪费许多开发人员的有用工时。

于 2014-12-21T11:36:22.547 回答
1

我在这个问题上工作了 2 天,对我来说工作的是添加自定义用户代理,就像在这个链接中一样

代码

var client = new HttpClient();
client.DefaultRequestHeaders.Add("User-Agent", "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0)");
于 2016-11-29T10:46:43.047 回答