2014-09-26 2 views
0

У меня есть удаленный сервер файлов для всех моих файлов. Я хочу проверить, существуют ли они перед их отображением.Проверка WebRequest Если файл выходит на удаленном сервере, он всегда возвращает True из-за перенаправления 404

Это прекрасно работает, но ломается, когда файл не существует, как на веб-сайте. У меня есть перенаправление auto 404 на месте, поэтому, если файл не существует, он всегда возвращается как код состояния 200 или TRUE, как веб-страница в своем уме существует, поскольку она перенаправляет и представляет ее.

Как я могу обойти это?

public bool verifyFile(string filePath) 
    { 
     bool result = true; 
     string Domain = "http://www.SiteName.com/"; 

     try 
     { 
      WebRequest webRequest = WebRequest.Create(Domain + filePath); 
      webRequest.Timeout = 1200; 
      webRequest.Method = "HEAD"; 

      webRequest.GetResponse(); 
     } 
     catch 
     { 
      result = false; 
     } 

     return result; 
    } 
+0

Устранение автопереадресации? Предоставление фактического кода 404 полезно и во многих других случаях (например, для SEO и отладки). – Matthew

+1

Чтобы решить вашу непосредственную проблему через образец кода, вы можете проверить заголовки ответов, возможно, вы ожидаете определенный тип mime, и может быть иначе, когда вы получите фальшивый ответ 404. – Matthew

+0

@Matthew - Ты прибил его! Проверяя MimeType или «ContentType» Response, он возвращает «text/html», если он попадает в перенаправление. Я разместил свое исправление ниже. –

ответ

0

@Matthew При условии правильного ответа. Мне нужно проверить возвращаемый MimeType. Если он возвращается в виде веб-страницы (text/html; charset = utf-8), тогда я устанавливаю return как false. Если файл существует, то mimetype будет изображением или документом. См. Обновленный код ниже.

public bool verifyFile(string filePath) 
    { 
     bool result = true; 
     string Domain = "http://www.SiteName.com/"; 

     try 
     { 
      WebRequest webRequest = WebRequest.Create(Domain + filePath); 
      webRequest.Timeout = 1200; 
      webRequest.Method = "HEAD"; 

      WebResponse webResponse = webRequest.GetResponse(); 

      result = webResponse.ContentType.ToString() == "text/html; charset=utf-8" ? false : true; 
     } 
     catch 
     { 
      result = false; 
     } 

     return result; 
    } 
Смежные вопросы