2009-09-08 15 views

Respuesta

32

Si desea detectar una respuesta de redirección, en lugar de seguir automáticamente a crear el WebRequest y establezca la propiedad AllowAutoRedirect a false:

HttpWebRequest request = WebRequest.Create(someUrl) as HttpWebRequest; 
request.AllowAutoRedirect = false; 
HttpWebResponse response = request.GetResponse() as HttpWebResponse; 
if (response.StatusCode == HttpStatusCode.Redirect || 
    response.StatusCode == HttpStatusCode.MovedPermanently) 
{ 
    // Do something here... 
    string newUrl = response.Headers["Location"]; 
} 
+1

No he verificado esto por mi cuenta, pero acabo de encontrar algo que dice: "Si la propiedad HttpWebRequest.AllowAutoRedirect es falso, HttpStatusCode.Found provocará una excepción ". Fuente: http://www1.cs.columbia.edu/~lok/csharp/refdocs/System.Net/types/HttpStatusCode.htm –

+0

@ Nathan: Realmente no veo cómo, ya que HttpStatusCode es una enumeración. La documentación vinculada (debe terminar en '.html' BTW) parece estar desactualizada; esa oración probablemente fue un error de cortar y pegar. – devstuff

+0

BTW, también puede usar HttpStatusCode.Redirect (otro alias para 302), que es un poco más obvio. – devstuff

3

así:

HttpWebResponse response; 
int code = (int) response.StatusCode; 

El código debe ser

HttpStatusCode.TemporaryRedirect 
+1

HttpStatusCode.TemporaryRedirect es un 307. http://www1.cs.columbia.edu/~lok/csharp/refdocs/System.Net/types/HttpStatusCode.html#TemporaryRedirect –

+0

Ahora puedo ver el código de respuesta, pero aún así redirige y me da 'OK' –

+0

@Nathan Taylor: Copié/pegué lo que CURL me dio usando curl -I "url" –

1

VB Net Cod e

Function GetRealUrl(someUrl As String) As String 
     Dim req As HttpWebRequest = TryCast(WebRequest.Create(someUrl), HttpWebRequest) 
     req.AllowAutoRedirect = False 
     Dim response As HttpWebResponse = TryCast(req.GetResponse(), HttpWebResponse) 
     If response.StatusCode = HttpStatusCode.Redirect OrElse response.StatusCode = HttpStatusCode.MovedPermanently Then 
      ' Do something... 
      Dim newUrl As String = response.Headers("Location") 
      getrealurl = newUrl 
     Else 
      getrealurl = someUrl 
     End If 
End Function 
Cuestiones relacionadas