我有一个 Web 服务,我在其中操作 POST 和 GET 方法,以促进客户端/服务器样式架构中某些文件的上传/下载功能。基本上,用户可以单击按钮下载特定文件,在应用程序中进行一些更改,然后单击上传按钮将其发回。
我遇到的问题是下载。假设用户需要 3 个文件 1.txt、2.txt 和 3.txt。除了 2.txt 在服务器上不存在。
所以我有这样的代码(在服务器端):
public class HttpHandler : IHttpHandler
{
public void ProcessRequest
{
if (context.Request.HttpMethod == "GET")
{
GoGetIt(context)
}
}
private static void GoGetIt(HttpContext context)
{
var fileInfoOfWhereTheFileShouldBe = new FileInfo(......);
if (!fileInfoOfWhereTheFileShouldBe.RefreshExists())
{
//Remove this line below
//throw new Exception("Oh dear the file doesn't exist");
//Replace with a force return of whichever code I chose e.g. 200
??...
}
...
所以我遇到的问题是,当我运行应用程序时,我在客户端使用 WebClient 来使用 DownloadFile 方法,然后使用上面的代码,我得到:
WebException 未处理:远程服务器返回错误:(500) 内部服务器错误。
(调试时)如果我连接到浏览器并使用,http://localhost:xxx/1.txt
我可以单步执行服务器端代码并按预期抛出异常。所以我想我想知道如何正确处理客户端的内部服务器错误,这样我就可以返回一些有意义的东西,比如“文件不存在”。一种想法是围绕该方法使用try catch,WebClient.DownloadFile(address, filename)
但我不确定这是唯一会发生的错误,即文件不存在。
编辑:使用 HttpResponse 遵循解决方案
所以如果我要使用 HttpResponse,我能得到一些关于如何开始的建议吗?
我从客户端删除异常抛出,并用自定义 HttpResponse 替换?所以基本上我想我会选择一个要使用的代码,比如 200,并在上面的 if 语句中强制返回代码 200。见评论。
然后在客户端只需使用If (Response.StatusCode == 200)
并做我想做的任何事情(通知用户文件不存在)
我走对了吗?
编辑2:
我一直在尝试在我的文件复制方法周围使用 try catch,然后在 catch 中设置状态代码或状态描述,但这会在设置状态描述时引发异常。像这样:
context.Response.StatusDescription = ex.ToString();
context.Response.Status = ex.ToString();
ArgumentOutOfRangeException - 指定的参数超出了有效值的范围。