Как проверить, существует ли файл на веб-сервере его URL?

С тех пор июль 2007 , gitignore действительно описывает шаблоны исключения.

, Если бы шаблон заканчивается наклонной чертой , он удален в целях следующего описания, но он только нашел бы соответствие с каталогом .

, Другими словами, нечто / будет соответствовать нечто каталога и путям под ним, но не будет соответствовать регулярному файлу или нечто символьной ссылки (это согласовывается с путем, как спецификация пути работает в целом в мерзавце).

Как проиллюстрированный этим потоком , тот шаблон не всегда выражался '/' для соответствия каталогу.

9
задан sonjz 16 September 2016 в 15:04
поделиться

6 ответов

Вы можете использовать .NET для выполнения запроса HEAD, а затем посмотреть статус ответа.

Ваш код будет выглядеть примерно так (адаптировано из 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;

Вот список с подробным описанием кодов состояния , которые могут быть возвращены перечислителем StatusCode.

20
ответ дан 4 December 2019 в 08:52
поделиться

Можно ли предположить, что вы запускаете свое веб-приложение на том же веб-сервере, с которого получаете страницы справки? Если да, то вы можете использовать метод Server.MapPath для поиска пути к файлу на сервере в сочетании с методом File.Exists из пространства имен System.IO, чтобы подтвердить, что файл существует.

2
ответ дан 4 December 2019 в 08:52
поделиться

Отправить запрос HEAD для URL (вместо GET). Сервер вернет 404, если он не существует.

1
ответ дан 4 December 2019 в 08:52
поделиться

Взгляните на класс HttpWebResponse . Вы можете сделать что-то вроде этого:

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
}
1
ответ дан 4 December 2019 в 08:52
поделиться

Если вы хотите проверить статус документа на сервере:

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

Спасибо.

0
ответ дан 4 December 2019 в 08:52
поделиться

РЕДАКТИРОВАТЬ: По-видимому, хороший способ сделать это - запрос HEAD.

Вы также можете создать серверное приложение, в котором будет храниться имя каждой доступной веб-страницы на сервере. После этого ваше клиентское приложение может запросить это приложение и ответить немного быстрее, чем запрос полной страницы, и без выдачи ошибки 404 каждый раз, когда файл не существует.

0
ответ дан 4 December 2019 в 08:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: