How can I catch a 404?
try
{
var request = WebRequest.Create(uri);
using (var response = request.GetResponse())
{
using (var responseStream = response.GetResponseStream())
{
// Process the stream
}
}
}
catch (WebException ex)
{
if (ex.Status == WebExceptionStatus.ProtocolError &&
ex.Response != null)
{
var resp = (HttpWebResponse) ex.Response;
if (resp.StatusCode == HttpStatusCode.NotFound)
{
// Do something
}
else
{
// Do something else
}
}
else
{
// Do something else
}
}
Use the HttpStatusCode Enumeration
, specifically HttpStatusCode.NotFound
Something like:
HttpWebResponse errorResponse = we.Response as HttpWebResponse;
if (errorResponse.StatusCode == HttpStatusCode.NotFound) {
//
}
Wherewe
is a WebException
.
In C# 6 you can use exception filters.
try
{
var request = WebRequest.Create(uri);
using (var response = request.GetResponse())
using (var responseStream = response.GetResponseStream())
{
// Process the stream
}
}
catch(WebException ex) when ((ex.Response as HttpWebResponse)?.StatusCode == HttpStatusCode.NotFound)
{
// handle 404 exceptions
}
catch (WebException ex)
{
// handle other web exceptions
}
I haven't tested this, but it should work
try
{
// TODO: Make request.
}
catch (WebException ex)
{
if (ex.Status == WebExceptionStatus.ProtocolError) {
HttpWebResponse resp = ex.Response as HttpWebResponse;
if (resp != null && resp.StatusCode == HttpStatusCode.NotFound)
{
// TODO: Handle 404 error.
}
else
throw;
}
else
throw;
}
I think if you catch a WebException there is some information in there that you can use to determine if it was a 404. That's the only way I know of at the moment...I'd be interested in knowing any others...
catch(WebException e) {
if(e.Status == WebExceptionStatus.ProtocolError) {
var statusCode = (HttpWebResponse)e.Response).StatusCode);
var description = (HttpWebResponse)e.Response).StatusDescription);
}
}