2014-12-02 4 views
0

Rest API 호출이 게시에서 예외를 throw합니다. 그리고 그VS.Net에서 WebException 세부 정보가 변경됨

The remote server returned an error: (404) Not Found.

는 API fiddler 트래픽을 캡처 할 때 잘 작동

try 
{ 
     RestClient client = new RestClient(...); 
     string apiResponse = client.MakeRequest(..); 
}  
catch (WebException wex) 
{ 
     throw wex; 
} 

를 호출하는 다음 코드입니다. 그러나 피들러가 캡처하지 않으면 클라이언트는 다음 예외를 받았습니다.

The remote server returned an error: (502) Bad Gateway.

ps. Postman (크롬 확장 프로그램) 및 Soap UI도 404을받은 : 업데이트]

찾을 수 없음 : 을 사람이 내가 놓친 거지 무엇을 지적시겠습니까

public string MakeRequest(string parameters) 
{ 
    var request = (HttpWebRequest)WebRequest.Create(_RestEndPoint + (parameters ?? String.Empty)); 
    request.Proxy = WebRequest.DefaultWebProxy; 
    request.ContentLength = 0; 
    request.Method = _Method.ToString(); 
    request.ContentType = _ContentType; 
    request.KeepAlive = true; 
    if (_RequestHeader != null) 
    { 
     foreach (var hdr in _RequestHeader) 
     { 
      request.Headers.Add(hdr.Key, hdr.Value); 
     } 
    } 
    if (_Method == HttpVerb.POST || _Method == HttpVerb.PUT) 
    { 
     if (!string.IsNullOrEmpty(_PayLoad)) 
     {      
      var bytes = Encoding.UTF8.GetBytes(_PayLoad); 
      request.ContentLength = bytes.Length; 

      using (var writeStream = request.GetRequestStream()) 
      { 
       writeStream.Write(bytes, 0, bytes.Length); 
       writeStream.Close();       
      } 
     } 
    } 
    using (var response = (HttpWebResponse)request.GetResponse())//Error returns here 
    { 
     var responseValue = string.Empty; 
     checkForResponseExceptions(response.StatusCode, parameters); 

     // grab the response 
     using (var responseStream = request.GetResponse().GetResponseStream()) 
     { 
      if (responseStream != null) 
      { 
       using (var reader = new StreamReader(responseStream)) 
       { 
        responseValue = reader.ReadToEnd(); 
       } 
      } 
     } 

     return responseValue; 
    } 
} 

를 디버깅하는 동안이 코드와 오류가 수신된다?

업데이트 2 : 나는 다음 코드를 시도하고 같은 문제

if (_Method == HttpVerb.POST) 
{ 
    using (var wb = new WebClient()) 
    { 
     wb.Headers[HttpRequestHeader.ContentType] = _ContentType; 
     foreach (var hdr in _RequestHeader) 
     { 
      wb.Headers.Add(hdr.Key, hdr.Value); 
     } 
     try 
     { 
      var response = wb.UploadString(_RestEndPoint + (parameters ?? String.Empty), _Method.ToString(), _PayLoad); 
     } 
     catch (Exception ex) 
     { 
      throw ex; 
     } 
    } 
} 

그래서를 가지고있다

, 나는 @GSerg가에서 12월 4일에 댓글로 뭔가 네트워크 설정에서 잘못된 것 같다 10:01. 그러나 IE 설정의 연결 탭에는 프록시가 설정되어 있지 않습니다. 어떻게하면이 문제를 없애기 위해 검사해야합니까?

+1

Fiddler는 HTTP 프록시 역할을합니다. Internet Explorer 설정 (연결 탭)이 Fiddler를 사용하도록 설정되어 있으면 실행되지 않는 Fiddler와 작동하지 않습니다. –

+0

웹 브라우저를 사용하고 있지 않습니다. 이것은 HTTP 웹 요청입니다. var request = WebRequest.Create (urlWithPortAndParams)); – MJK

+0

404 의미하는 것을 의미합니다. 찾을 수 없습니다. 따라서 Rest API를 찾을 수 없으므로 Rest API에 연결할 수 없습니다. – user3036342

답변

0

HTTP 오류는 클라이언트가 존재하지 않는 무언가를 요구하고있다

4XX 오류가 404와 같은 실수를하고 사용자에게 연결되어 "클라이언트"오류, 오류입니다 "오류 유형"에 의해 그룹화 서버.

5xx 오류는 "서버"오류로, 내부 문제로 인해 서버가 요청에 응답하는 데 문제가 있음을 나타냅니다.

일반적으로 502 잘못된 게이트웨이는 다른 서버에서 요청을받지 못하면 서버에서 전송됩니다. 당신의 경우에는, 그것은 피들러에서 오는 것일 수 있습니다. 왜냐하면 당신은 여전히 ​​정지 된 피 들러에게 여전히 질의를하고 있기 때문에 대답을 할 수 없기 때문입니다.

+0

어떻게 피들러에 질의를 할 수 있습니까? – MJK

+0

** 아마도 당신은 여전히 ​​fiddler **에게 질의를하고 있기 때문에 ** - 아닙니다. @Gimly 코드를 추가했는지 확인하십시오. 나는 3 대의 다른 기계 중 하나에 피들러가 설치되어 있지 않지만 동일한 충격을 주려고 시도했다. – MJK