1

我有一個目錄「Downloads」,其中有我們的客戶可以下載的靜態文件。我現在用的是下面的ActionLink的調用文件:當使用FileStreamResult找不到下載文件時返回消息

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

是所謂的「通用」控制器和使用下面的代碼返回文件:

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不是重定向 - 它只是一個「未找到」的錯誤。當然,如果你正在嘗試獲取的文件不存在,這是最合適的迴應。真的不清楚你在問什麼。 – 2015-04-03 00:17:59

+0

我想返回一個消息「文件未找到」或類似的東西,而不是頁面重定向到404錯誤頁面。 – New2ASPMVC 2015-04-03 00:21:44

+0

我不清楚你的意思。您希望返回哪個HTTP響應代碼?如果它不是404,我會說這是個壞主意。 – 2015-04-03 00:27:16

回答

2

我建議讓你的返回類型基於ActionResult而不是FileStreamResult,那麼你可以靈活地處理這個問題。

  1. 您可以重定向到您的自定義方法,然後從那裏您可以提供適當的消息/視圖。
  2. 通過異常和和配置文件句柄404與您的自定義錯誤文件。 (拋出新的HttpException(404,「Not found」);)

希望這可以解決您的問題。

相關問題