通常,您的代碼引發的異常將導致HTTP 500響應。根據服務器配置的不同,結果可能是標準錯誤頁面或擴展錯誤報告,其中包含有關例外情況的詳細信息 - 堆棧跟蹤等。通常,您不希望最終用戶看到這些信息。
對於MVC應用程序,有兩種基本方法可以處理這類代碼中的報告失敗。
首先,您可以用適當的HTTP響應代碼拋出HttpResponseException
:
if (!System.IO.File.Exists(filename))
throw new HttpResponseException(HttpStatusCode.NotFound);
的另一種選擇是你的控制器方法的返回類型更改爲ActionResult
,失敗時返回不同類型的結果。當你想回到一個完整的重定向,錯誤視圖等
public ActionResult DownloadFile(string fname)
{
string filepath = HostingEnvironment.MapPath("~/App_Data/" + fname);
if (!System.IO.File.Exists(filepath))
return new RedirectResult("~/Some/Error/Page");
return new FilePathResult(filepath, "text/plain");
}
當然,這只是一個巨大的簡化例如,這是有用的。基本上使用ActionResult
作爲返回類型意味着您可以返回該類的任何衍生產品,包括您的FilePathResult
,ViewResult
(例如,從View
方法)或其他任何衍生產品。
有一個方法檢查客戶端ID後返回一個布爾值,然後重定向到一個解釋結果的差異頁面。 – OneFineDay 2014-09-05 03:53:04
當用戶嘗試通過輸入fileID下載文件時,我確實在網頁上向用戶顯示錯誤。但現在我正在處理另一個試圖代表用戶下載文件的程序(我爲該程序提供了一個url模式)。正在拋出一個適當的異常? – totoro 2014-09-05 04:15:14