gpt4 book ai didi

c# - Webclient 使用下载文件从服务器抓取文件 - 处理异常

转载 作者:行者123 更新时间:2023-11-30 21:22:01 26 4
gpt4 key购买 nike

我有一个 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 我可以单步执行服务器端代码并​​按预期抛出异常。所以我想我想知道如何正确处理客户端的内部服务器错误,以便我可以返回一些有意义的东西,比如“文件不存在”。一种想法是围绕 WebClient.DownloadFile(address, filename) 方法使用 try catch,但我不确定这是唯一会发生的错误,即文件不存在。

编辑:遵循使用 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 - 指定的参数超出了有效值的范围。

最佳答案

如果您正在对 IHttpHandler 接口(interface)进行编程,则不应对该代码抛出异常。从来没有!

改为使用 Response.StatusCodeResponse.StatusDescription返回 meaningful information给客户。

只向系统抛出异常,因为那样的话,它将真正成为您的代码的异常。

编辑添加

回答您的编辑,我会这样做的方式是,如果在服务器端找不到文件,将返回 404 状态代码。让客户来处理。

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

编辑添加

Response.Status 是整数。这就是您收到 ArgumentOutOfRangeException 的原因。

确保 Status 是有效的 HTTP return codes 之一.

关于c# - Webclient 使用下载文件从服务器抓取文件 - 处理异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2444888/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com