通常,您的代码引发的异常将导致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