2013-10-21 4 views
0

간단한 웹 API를 만들었으며 IE에서이 API에 액세스하면 웹 API가 예상 한 것과 정확히 일치하는 결과를 반환합니다. 그러나 이제는 httpclient를 사용하여 웹 양식 응용 프로그램에서 동일한 웹 API에 액세스하려고했습니다. 하지만 이제 404 오류가 발생합니다. 하지만 브라우저를 사용할 때 결과를 얻으므로 API가 제대로 작동하는 것 같습니다. 어떤 아이디어가 잘못 됐나요? 이것은 다음 코드입니다 :404 다른 C# web forms 응용 프로그램에서 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

에서처럼, 을 사용자 정의 사용자 에이전트를 추가하는 것입니다 귀하의 webapi URL보다? – 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 일이 문제에 작동하고, 나를 위해 어떤 작업을 디버그, 요청 URL이 동일한 경우이 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

대단한 답변입니다. 환영합니다 – eliavs

관련 문제