我构建了一个基于给定ID检索文件的Web应用程序。如果服务器为无效ID引发异常,这会停止服务器吗? (我已经在我的localhost中尝试过了,在抛出异常之后服务器似乎很好,但我仍然不确定,因为浏览器甚至在我在visual studio中停止服务器后呈现页面。)
我这样做是因为我希望有一种方法可以告诉客户端应用程序,如果可以检索文件,则通过格式化为hostname / get / id的http GET访问我的Web应用程序。服务器返回有效ID的FilePathResult(在C#中)。对于无效ID,有没有比抛出异常更好的方法?
谢谢!
答案 0 :(得分:0)
抛出异常不会停止Web服务器。
答案 1 :(得分:0)
通常,代码抛出的异常将导致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
方法)或任何其他人。