¿ Como detectar error 404 ?

Iniciado por Eleкtro, 25 Mayo 2013, 16:13 PM

0 Miembros y 1 Visitante están viendo este tema.

Eleкtro

Hola

Tengo dos problemas con una página web.

Esta página devuelve un error 404: http://www.mp3crank.com/releases/1925/page/1

El primer problema es que necesito detectar ese error, lo he intentado mediante los "statuscode" pero a la hora de declarar la variable "response" da exception ("página no encontrada error 404"):

Código (vbnet) [Seleccionar]
   Dim request As HttpWebRequest = HttpWebRequest.Create("http://www.mp3crank.com/releases/1925/page/1")
   Dim response As HttpWebResponse = request.GetResponse()
   Dim sr As StreamReader = New StreamReader(response.GetResponseStream())

   If response.StatusCode = HttpStatusCode.NotFound Then
       MsgBox("Error 404")
   End If


Podría hacer un simple try catch en la variable "dim response" pero esto me parece muy cutre, ...¿aunque quizás esa es la única solución?

EDITO: No puedo usar la solución del Framework 4.5, estoy usando 3.5

El segundo problema es que la primera vez que se accede a esa url devuelve un 404, pero si se intenta acceder una segunda vez devolverá el código 200, así que el código de arriba, aunque me funcionase para detectar el error 404 sólamente me valdría para la primera vez (aunque si se accede desde el navegador seguirá devolviendo un 404)...

...Esto no tengo ni idea de porque sucede, imagino que el servidor detecta que se ha intentado acceder a una página que no existe, y entonces por algún extraño motivo se crea automáticamente esa página de forma temporal para devolver el código "200" las siguientes veces?, hasta ahí llega mi imaginación, no lo sé.

El caso es que la url que he puesto de enlace, si se testea más de una vez dará "200" pero en realidad no existe, es un "404", así que tengo dos problemas en uno y para hacer mis pruebas tengo que estar modificando cada vez el número "1925" de la url que os he dicho, por cualquier otro año entre "1XXX-1969", es un coñazo, jeje.

A ver si alguien me puede ayudar,
Gracias.









Eleкtro

Vaya que casualidad que justo cuando escribo el post encuentro la solución al primer problema... odio que me pase eso xD.

Una función que hace el try:ctach por mi, si este es el único modo de hacer las cosas... pues lo veo aceptable:

Código (vbnet) [Seleccionar]
Public Class Form1

   Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
       Dim request As System.Net.HttpWebRequest = System.Net.HttpWebRequest.Create("http://www.mp3crank.com/releases/12548/page/1")
       Dim response As System.Net.HttpWebResponse = GetHttpResponse(request)

       If response.StatusCode = System.Net.HttpStatusCode.NotFound Then
           MsgBox("Error 404")
       End If

   End Sub

   Public Shared Function GetHttpResponse(request As System.Net.HttpWebRequest) As System.Net.HttpWebResponse
       Try
           Return DirectCast(request.GetResponse(), System.Net.HttpWebResponse)
       Catch ex As System.Net.WebException
           If ex.Response Is Nothing OrElse ex.Status <> System.Net.WebExceptionStatus.ProtocolError Then
               Throw
           End If
           Return DirectCast(ex.Response, System.Net.HttpWebResponse)
       End Try
   End Function

End Class


Pues ahora me queda por resolver el segundo problema, que me da por válida (200) páginas que reálmente no existen (404), y esto ya si que no sé donde buscarlo ni como pensar en poder solucionarlo.

Saludos!