Dans notre application, nous avons une aide en ligne. Il fonctionne vraiment simple: si l'utilisateur clique sur le bouton Aide, une URL est créée en fonction de la langue actuelle et de l'aide au contexte (par exemple, " http://example.com/help/ "+ [lang_id] +" [help_context]) et appelé dans le navigateur. P>
Donc, ma question est la suivante: comment puis-je vérifier si un fichier existe sur le serveur Web sans charger le contenu complet du fichier? p>
Merci pour votre aide! P>
Mise à jour: Merci pour votre aide. Ma question a été répondue. Maintenant, nous avons des problèmes d'authentification de proxy et ne peuvent pas envoyer la demande HTTP;) strong> p>
7 Réponses :
Envoyez une demande de tête pour l'URL (au lieu d'un get). Le serveur retournera un 404 s'il n'existe pas. P>
Edit: Apparemment, une bonne méthode pour ce faire serait une demande de tête. p>
Vous pouvez également créer une application côté serveur qui stocke le nom de chaque page Web disponible sur le serveur. Votre application client pourrait ensuite interroger cette application et répondre un peu plus rapidement qu'une requête complète de la page et sans lancer une erreur 404 chaque fois que le fichier n'existe pas. P>
Ce n'est pas vrai - la demande de tête fait exactement cela.
Vous pouvez utiliser .NET pour faire une demande de tête, puis regarder le statut de la réponse.
Votre code ressemblerait à ceci (adapté de la demande de tête HTTP ): p>
// 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;
Je ne suis pas khow pourquoi ne pas avoir travaillé pour moi. Mais j'ai changé de code et c'est OK Demande WebRequest = WebRequest.create (URL); demande.method = "tête"; Httpwebrevonse réponse = (httpwebrevonse) demande.getresponse (); HTTPSTAUSCODE Statut = Response.StatusTuscode; Code> Quoi qu'il en soit, merci beaucoup.
Stackoverflow.com/Questtions/192085/...
Si cela vous donne le serveur distant renvoyé une erreur: (401) non autorisée code> en raison de la configuration de certains serveurs, supprimez la requête .method = "tête"; code> ligne;
Vous devez envelopper le demande.getresponse () code> à l'intérieur d'une prise de vue car vous pourriez recevoir une réception Web (par exemple, vous pouvez recevoir une exception de le serveur distant renvoyé une erreur: (403) interdit. < / code> lorsque vous essayez de faire de la demande.GetResponse ()
Pouvons-nous supposer que vous exécutez votre application Web sur le même serveur Web que vous récupérez vos pages d'aide? Si oui, vous pouvez utiliser la méthode serveur.mapath pour trouver un chemin d'accès au fichier sur le serveur combiné à la méthode Fichier.exists à partir de l'espace de noms System.IO pour confirmer que le fichier existe. P>
Non, j'exécute une application client de bureau qui tente de vérifier ce fichier sur un serveur Web distant.
Ah Ok, bien dans ce cas, je suis sûr que la réponse dont vous avez besoin a été fournie par les autres boursiers ici déjà.
Si vous souhaitez vérifier l'état d'un document sur le serveur:
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();
}
Jetez un coup d'oeil au HTTPWEBRESPONSE classe . Vous pouvez faire quelque chose comme ceci:
eu le même problème moi-même et a trouvé cette question et les réponses ici vraiment utiles.
mais les réponses ici utilisent l'ancien WEBREQUEST-Class qui est un peu obsolète, il n'a aucun support asynchronisé pour les démarreurs. Je voulais donc utiliser la façon la plus moderne de le faire avec httpclient . Voici un exemple avec une petite classe d'assistance pour vérifier si le fichier existe: p> utilisation: p>