2009-09-22 8 views
9

w naszej aplikacji mamy jakąś pomoc online. To działa bardzo prosto: jeśli użytkownik kliknie przycisk pomocy, budowany jest URL w zależności od bieżącego języka i kontekstu pomocy (np. "http://example.com/help/" + [LANG_ID] + "[HELP_CONTEXT]) i wywoływany w przeglądarceJak sprawdzić, czy plik istnieje na serwerze internetowym po jego adresie URL?

więc moje pytanie brzmi: Jak mogę sprawdzić, czy plik istnieje na serwerze WWW bez ładowania pełną zawartość pliku

Dzięki za pomoc

Aktualizacja:?!. Dzięki za pomoc Moje pytanie zostało odebrane Teraz mamy problemy z autoryzacją proxy i nie możemy wysłać żądania HTTP;)

Odpowiedz

19

Możesz użyć .NET do wykonania żądania HEAD, a następnie spojrzeć na status odpowiedzi.

Twój kod będzie wyglądać następująco (dostosowany od 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; 

Oto lista z wyszczególnieniem status codes które mogą być zwracane przez wyliczający StatusCode.

+0

Nie wiem, dlaczego nie zadziałało dla mnie. ale zmieniłem kod i jest ok. 'Request WebRequest = WebRequest.Create (url); request.Method = "HEAD"; Odpowiedź HttpWebResponse = (HttpWebResponse) request.GetResponse(); HttpStatusCode status = response.StatusCode; ' tak, dziękuję bardzo. – OammieR

+0

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

+1

jeśli to daje 'Serwer zdalny zwrócił błąd: (401) Nieautoryzowane' ze względu na konfigurację niektórych serwerów upuść 'request.Method =" HEAD ";' linia – BornToCode

1

Wysyła żądanie HEAD dla adresu URL (zamiast GET). Serwer zwróci 404, jeśli nie istnieje.

0

EDIT: Wydaje się, że dobrym sposobem na zrobienie tego byłoby żądanie HEAD.

Można również utworzyć aplikację po stronie serwera, która przechowuje nazwę każdej dostępnej strony internetowej na serwerze. Twoja aplikacja kliencka mogłaby następnie przesłać zapytanie do tej aplikacji i odpowiedzieć nieco szybciej niż żądanie pełnej strony i bez rzucania błędu 404 za każdym razem, gdy plik nie istnieje.

+2

Nieprawda - wniosek HEAD robi dokładnie to. –

+0

Widzę to teraz. –

1

Czy możemy założyć, że korzystasz z aplikacji internetowej na tym samym serwerze WWW, z którego pobierane są strony pomocy? Jeśli tak, możesz użyć metody Server.MapPath do znalezienia ścieżki do pliku na serwerze w połączeniu z metodą File.Exists z obszaru nazw System.IO, aby potwierdzić, że plik istnieje.

+0

Nie ja działam aplikacja kliencka, która próbuje sprawdzić ten plik na zdalnym serwerze WWW. – Alexander

+0

ah ok, cóż, w tym przypadku jestem prawie pewien, że odpowiedź, której potrzebujesz, została już dostarczona przez innych kolegów. – Streklin

0

Jeśli chcesz sprawdzić status dokumentu na serwerze:

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(); 
} 

Dziękuję.

1

Spójrz na klasę HttpWebResponse. Możesz zrobić coś takiego:

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 
} 
Powiązane problemy