1

У меня есть каталог «Загрузки», где у меня есть статические файлы, которые могут загрузить наши клиенты. Я использую следующие действия ActionLink для вызова файла:Обратное сообщение, если файл загрузки не найден с использованием FileStreamResult

@Html.ActionLink("Download Example", "Download", new { area = "", controller = "Common", fileName = "SomeFile.xlsx" }) 

, который вызывает «Common» контроллер и возвращает файл, используя код ниже:

public FileStreamResult Download(string fileName) 
     { 
      var filePath = Server.MapPath("~/Download/" + fileName); 

      var ext = Path.GetExtension(fileName); 

      switch (ext) 
      { 
       case ".xlsx": 
        return new FileStreamResult(new FileStream(filePath, FileMode.Open), 
         "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); 
       case ".xls": 
        return 
         new FileStreamResult(
          new FileStream(Server.MapPath("~/Download/" + fileName), FileMode.Open), 
          "application/vnd.ms-excel"); 
       case ".pdf": 
        return 
         new FileStreamResult(
          new FileStream(Server.MapPath("~/Download/" + fileName), FileMode.Open), 
          "application/pdf"); 
      } 

      return null; 
     } 
    } 

Мой вопрос заключается в том, что, так как я не являюсь вернув представление, как я могу вернуть сообщение в представление, чтобы показать, нет ли файла (404)?

я понял, это много:

if (!System.IO.File.Exists(filePath)) 
    { 

    } 

, но я понятия не имею о том, что вернуться, чтобы избежать 404 редирект. Я хочу вернуть сообщение «Файл не найден» или что-то подобное на странице, а не перенаправить страницу на страницу ошибки 404.

+0

404 не является перенаправлением - это просто ошибка «не найдена». Разумеется, это наиболее подходящий ответ, если файл, который вы пытаетесь извлечь, не существует. Не совсем понятно, что вы спрашиваете. –

+0

Я хочу вернуть сообщение «Файл не найден» или что-то подобное, а не перенаправление страницы на страницу ошибки 404. – New2ASPMVC

+0

Мне не совсем понятно, что вы имеете в виду. Какой код ответа HTTP вы ожидаете вернуться? Если это ничего, кроме 404, я бы сказал, что это плохая идея. –

ответ

2

Я бы предложил, чтобы ваш тип возвращаемого значения основывался на ActionResult, а не FileStreamResult, тогда вы можете иметь гибкость, чтобы справиться с этим.

  1. вы можете перенаправить на свой собственный метод, а затем из него вы можете предоставить правильное сообщение/представление.
  2. через дескриптор исключительной ситуации и в конфигурационном файле 404 с вашим пользовательским файлом ошибок. (выбросить новое HttpException (404, «Не найдено»);)

надеюсь, что это решит вашу проблему.