I've hunted around for some definitive documentation on this but haven't had much luck finding any.
For which HTTP Response Status codes will HttpWebRequest.GetResponse()
generate a WebException
after doing something like a POST?
Specifically, will it generate a WebException
for anything other than status 200 OK
? Or will it only generate a WebException
for say, 400, 404, and 500 (for the sake of argument)?
I want to know since the server I'm communicating with defines anything other than HTTP 200 OK
coming back as an error condition. Can I rely on a WebException
being generated for anything other than 200?
I've currently written my code to check the return status code every time and ensure it's 200 OK
. If it's not, it will take appropriate action—but there's a lot of duplication between that code and the catch block for a WebException
that I'm hoping to clean up.
Any relevant links to documentation would be most appreciated.
The WebException class is thrown by classes descended from WebRequest and WebResponse that implement pluggable protocols for accessing the Internet. When WebException is thrown by a descendant of the WebRequest class, the Response property provides the Internet response to the application.
C# Syntax: [Serializable] public class HttpWebResponse : WebResponse. Remarks. The HttpWebResponse class contains support for the properties and methods included in WebResponse with additional elements that enable the user to interact directly with the HTTP protocol.
Ended up doing an explicit check after the response & catching and checking WebExceptions; results in some duplicated code but there's no definitive answer on whether a WebException will ALWAYS occur if the status is NOT 200.
I think it will, but it sounds like a risky assumption to make. For one thing, the MSDN docs make it clear that GetResponse
will throw exceptions other than just WebException
. However, I can say for definite from experience that a "304 Not-Modified" response will be thrown as a WebException
.
All this talk is giving off a whiffy Code Smell; don't use exceptions to control the flow of execution. You would be better off handling exceptions appropriately, then explicitly checking the StatusCode
property for your allowable values.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With