Web 客户端使用下载文件从服务器抓取文件 - 处理异常

2024-03-22

我有一个 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 catchWebClient.DownloadFile(address, filename)方法,但我不确定这是唯一会发生的错误,即文件不存在。

编辑:遵循使用 HttpResponse 的解决方案

那么,如果我要使用 HttpResponse,我可以获得一些关于如何开始的建议吗?

我从客户端删除异常抛出,并用自定义 HttpResponse 替换?所以基本上我想我会选择一个代码来使用,比如 200,并在上面的 if 语句中强制返回代码 200。见评论。

然后在客户端只需使用If (Response.StatusCode == 200)并做任何我想做的事(通知用户文件不存在)

我走的路是对的吗?

edit 2:

我一直在尝试在文件复制方法周围使用 try catch,然后在 catch 中设置状态代码或状态描述,但这在设置状态描述时会引发异常。如下所示:

context.Response.StatusDescription = ex.ToString();
context.Response.Status = ex.ToString();

ArgumentOutOfRangeException - 指定的参数超出了有效值的范围。


如果您正在编程IHttpHandler接口你不应该在该代码上抛出异常。绝不!

相反,使用Response.StatusCode http://msdn.microsoft.com/en-us/library/system.web.httpresponse.statuscode.aspx and Response.StatusDescription http://msdn.microsoft.com/en-us/library/system.web.httpresponse.statusdescription.aspx回来有意义的信息 http://en.wikipedia.org/wiki/HTTP_return_codes给客户。

让抛出异常只发生在系统上,因为这样,它就会REALLY例外YOUR code.

编辑添加

回答您的编辑,我的做法是,如果在服务器端找不到文件,则会返回404状态代码。并让客户处理这个问题。

但是,正如您所指出的,您正在处理 Web 服务,因此,我只需在标头中添加一些额外的响应,以便更好地指定客户端应用程序的服务器端实际发生的情况。

编辑添加

Response.Status是 和 整数。这就是为什么你会得到ArgumentOutOfRangeException.

确保 Status 是有效的之一HTTP 返回码 http://en.wikipedia.org/wiki/HTTP_return_codes.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Web 客户端使用下载文件从服务器抓取文件 - 处理异常 的相关文章

随机推荐