Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# web服务器是否应该为无效请求引发异常?_C#_.net_Exception_Webserver - Fatal编程技术网

C# web服务器是否应该为无效请求引发异常?

C# web服务器是否应该为无效请求引发异常?,c#,.net,exception,webserver,C#,.net,Exception,Webserver,我已经构建了一个基于给定ID检索文件的web应用程序。如果服务器抛出无效ID的异常,这会停止服务器吗?(我已经在本地主机上试用过,抛出异常后服务器似乎没有问题,但我仍然不确定,因为我在visual studio中停止服务器后,浏览器甚至会呈现页面。) 我这样做是因为我想有一种方法告诉客户机应用程序,如果可以检索文件,谁可以通过http GET格式化为hostname/GET/id来访问我的web应用程序。服务器返回有效ID的FilePathResult(C#)。对于无效ID,是否有比引发异常更好

我已经构建了一个基于给定ID检索文件的web应用程序。如果服务器抛出无效ID的异常,这会停止服务器吗?(我已经在本地主机上试用过,抛出异常后服务器似乎没有问题,但我仍然不确定,因为我在visual studio中停止服务器后,浏览器甚至会呈现页面。)

我这样做是因为我想有一种方法告诉客户机应用程序,如果可以检索文件,谁可以通过http GET格式化为hostname/GET/id来访问我的web应用程序。服务器返回有效ID的FilePathResult(C#)。对于无效ID,是否有比引发异常更好的方法


谢谢

引发异常不会停止web服务器。

通常,代码引发的异常将导致HTTP 500响应。根据服务器配置,结果将是标准错误页面或扩展错误报告,其中包含异常堆栈跟踪等详细信息。通常,您不希望最终用户看到这些内容

对于MVC应用程序,有两种基本方法可以处理此类代码中的报告失败

首先,您可以使用适当的HTTP响应代码抛出:

if (!System.IO.File.Exists(filename))
    throw new HttpResponseException(HttpStatusCode.NotFound);
另一个选项是将控制器方法的返回类型更改为,并在失败时返回不同类型的结果。例如,当您想要返回完整重定向、错误视图等时,这非常有用

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后返回布尔值,然后重定向到解释结果的差异页面。当用户试图通过输入文件id下载文件时,我确实在网页上向用户显示了一个错误。但是现在我正在处理另一个程序,该程序试图代表用户下载该文件(我为该程序提供了一个url模式)。抛出异常是否合适?感谢您的解释!您认为在程序访问时抛出HttpResponseException是一种好的做法吗?同时为人执行重定向?我个人不喜欢使用它,但MVC框架设置为接受这些异常作为有效输出。我想这是一种风格选择。