.nethttphttpwebrequesthttp-status-code-304

HttpWebRequest.GetResponse throws WebException on HTTP 304


When a web server responds to HttpWebRequest.GetResponse() with HTTP 304 (Not Modified), GetResponse() thows a WebException, which is so very weird to me. Is this by design or am I missing something obvious here?


Solution

  • Ok, this seems to be a by-design behavior and a perfect example of a vexing exception. This can be solved with this:

    public static HttpWebResponse GetHttpResponse(this HttpWebRequest request)
    {
        try
        {
            return (HttpWebResponse) request.GetResponse();
        }
        catch (WebException ex)
        {
            if(ex.Response == null || ex.Status != WebExceptionStatus.ProtocolError)
                throw; 
    
            return (HttpWebResponse)ex.Response;
        }
    }