2013-10-21 23 views
0

我創建了一個簡單的web api,當我從IE瀏覽器訪問它時,web api正好返回我的預期結果。但是,現在我嘗試使用httpclient從Web窗體應用程序訪問相同的Web API。但是現在我得到了一個404錯誤。但是api似乎工作,因爲我在使用瀏覽器時收到了結果。任何想法出了什麼問題? 這是代碼:404從另一個c#web窗體應用程序調用c#web 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; 
+1

如果你調試,請求URL是相同的比你的webapi網址? – pollirrata

+0

我會把這個留給WCF專家來回答,但是直到他們發揮他們的魔力......試圖運行wireshark或類似的東西來看看封面下發生了什麼? – JFish222

+0

哦,只是萬一它的所有在一個盒子(連接到本地主機),大多數數據包嗅探器不工作。爲了監控本地主機,我已經運行了RawCap http://www.netresec.com/?page=RawCap,以及來自nirsoft的這個基於winsock的嗅探器:http://www.nirsoft.net/utils/socket_sniffer.html – JFish222

回答

1

這是工作的代碼。

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; 
0

哇。這個週末我遇到了同樣的錯誤,我無法想象這個問題的原因是多麼脆弱。

這是對我工作:

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"; 

我真誠希望能儘快完成一些工作,以消除這種不必要的僵硬,這可能會浪費許多開發人員的有用工作時間。

1

我在這個問題上工作2天,什麼工作對我來說是添加自定義用戶代理, 想在這個link

代碼

var client = new HttpClient(); 
client.DefaultRequestHeaders.Add("User-Agent", "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0)"); 
+0

偉大的答案!歡迎來到stackoverflow – eliavs

相關問題