简体   繁体   中英

WebException details changed on VS.Net

A Rest API call throws an exception on post. And that is

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

The following code calling the api

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

It works fine when the fiddler is capturing traffic. But if the fiddler is not capturing then client received the following exception.

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

PS. Postman (Chrome extension) and Soap UI also received 404: Not Found

UPDATED: This is the code and the error is received while debugging

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

Can anyone please point out what am i missing?

Update 2:

I have tried the following code and have the same issue

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

So, I guess something is wrong in the network settings as @GSerg commented on Dec 4 at 10:01. But there are no proxy set up in connection tab of IE settings. What and how should i check to get rid of this problem??

HTTP errors are grouped by "type of errors"

4xx errors are "client" errors, errors that are linked to the user doing a mistake, like 404 is the client asking for something that does not exist on the server.

5xx errors are "server" errors, meaning that the server had a problem answering the request, because of internal issues.

The 502 bad gateway is usually sent from a server when he couldn't get a request from another server. In your case, it could be coming from fiddler, because you're probably still making the query to fiddler who is stopped, and thus cannot answer.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM