2009-09-22 12 views
9

en nuestra aplicación tenemos algún tipo de ayuda en línea. Funciona realmente simple: si el usuario hace clic en el botón de ayuda se construye una URL dependiendo del idioma actual y contexto de ayuda (por ejemplo, "http://example.com/help/" + [LANG_ID] + "[HELP_CONTEXT]) y se llama dentro del navegador.¿Cómo verificar si un archivo existe en un servidor web por su URL?

Así que mi pregunta es: ¿Cómo puedo comprobar si existe un archivo en el servidor web sin tener que cargar el contenido completo del archivo

Gracias por su ayuda

actualización:?!. Gracias por su ayuda mi pregunta ha sido contestada Ahora tenemos problemas de autenticación proxy y no podemos enviar la solicitud HTTP;)

Respuesta

19

Puede usar .NET para hacer una solicitud HEAD y luego ver el estado de la respuesta.

Su código sería algo como esto (adaptado de The Lowly HTTP HEAD Request):

// create the request 
HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest; 

// instruct the server to return headers only 
request.Method = "HEAD"; 

// make the connection 
HttpWebResponse response = request.GetResponse() as HttpWebResponse; 

// get the status code 
HttpStatusCode status = response.StatusCode; 

Aquí hay una lista que detalla la status codes que puede ser devuelto por el empadronador StatusCode.

+0

No sé por qué no funcionó para mí. pero he cambiado un código y está bien 'Solicitud WebRequest = WebRequest.Create (url); request.Method = "HEAD"; HttpWebResponse response = (HttpWebResponse) request.GetResponse(); HttpStatusCode status = response.StatusCode; ' de todos modos, muchas gracias. – OammieR

+0

http://stackoverflow.com/questions/192085/test-to-see-if-an-image-exists-in-c-sharp –

+1

si esto le da 'El servidor remoto devolvió un error: (401) no autorizado' debido a la configuración de algunos servidores, suelte la línea 'request.Method =" HEAD ";' – BornToCode

1

Envía una solicitud HEAD para la URL (en lugar de un GET). El servidor devolverá un 404 si no existe.

0

EDITAR: Al parecer, un buen método para hacer esto sería una solicitud HEAD.

También podría crear una aplicación del lado del servidor que almacene el nombre de cada página web disponible en el servidor. Su aplicación cliente podría entonces consultar esta aplicación y responder un poco más rápido que una solicitud de página completa, y sin arrojar un error 404 cada vez que el archivo no existe.

+2

No es cierto - petición HEAD hace exactamente esto. –

+0

Veo eso ahora. –

1

¿Podemos suponer que está ejecutando su aplicación web en el mismo servidor web del que está recuperando sus páginas de ayuda? En caso afirmativo, puede utilizar el método Server.MapPath para encontrar una ruta al archivo en el servidor combinado con el método File.Exists desde el espacio de nombres System.IO para confirmar que el archivo existe.

+0

No, estoy corriendo una aplicación cliente de escritorio que intenta verificar ese archivo en un servidor web remoto. – Alexander

+0

ah ok, bueno, en ese caso, estoy bastante seguro de que la respuesta que necesita ya fue proporcionada por los otros compañeros aquí. – Streklin

0

Si desea comprobar el estado de un documento en el servidor:

function fetchStatus(address) { 
var client = new XMLHttpRequest(); 
client.onreadystatechange = function() { 
    // in case of network errors this might not give reliable results 
    if(this.readyState == 4) 
    returnStatus(this.status); 
} 
client.open("HEAD", address); 
client.send(); 
} 

Gracias.

1

Echa un vistazo a la clase HttpWebResponse. Se podría hacer algo como esto:

string url = "http://example.com/help/" + LANG_ID + HELP_CONTEXT; 
WebRequest request=WebRequest.Create(URL); 
HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 
if (response.StatusDescription=="OK") 
{ 
    // worked 
} 
Cuestiones relacionadas