HttpWebRequest.GetResponse throws WebException on HTTP 304
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; } }