当我使用 Postman 尝试将大文件上传到我的服务器(用 .NET Core 2.2 编写)时,Postman 立即显示错误HTTP Error 404.13 - Not Found:The request filtering module is configured to deny a request that exceeds the request content length
但是,当我使用代码上传那个大文件时,它会卡在发送文件的线路上。
我的客户代码:
public async void TestUpload() {
StreamContent streamContent = new StreamContent(File.OpenRead("D:/Desktop/large.zip"));
streamContent.Headers.Add("Content-Disposition", "form-data; name=\"file\"; filename=\"large.zip\"");
MultipartFormDataContent multipartFormDataContent = new MultipartFormDataContent();
multipartFormDataContent.Add(streamContent);
HttpClient httpClient = new HttpClient();
Uri uri = new Uri("https://localhost:44334/api/user/testupload");
try {
HttpResponseMessage httpResponseMessage = await httpClient.PostAsync(uri, multipartFormDataContent);
bool success = httpResponseMessage.IsSuccessStatusCode;
}
catch (Exception ex) {
}
}
我的客户端代码卡在了 line HttpResponseMessage httpResponseMessage = await httpClient.PostAsync(uri, multipartFormDataContent),而服务器没有收到任何请求(我使用断点来确保这一点)。
如果文件较大,它会卡住更长时间。查看任务管理器,我可以看到我的客户端程序使用了大量的 CPU 和磁盘,因为它实际上是将文件上传到服务器。过了一会儿,代码移动到下一行,即
bool success = httpResponseMessage.IsSuccessStatusCode
然后通过阅读响应内容,我得到了与Postman完全相同的结果。
现在我想知道如何立即获取错误以便能够及时通知用户,我不想等待很长时间。
请注意,当我使用 Postman 上传大文件时,我的服务器也没有收到任何请求。我想我错过了一些东西,也许我的客户端代码有问题。
编辑:实际上我认为这是客户端错误。但如果是服务器端错误,那么对我来说仍然没有太大意义。因为,让我理清思路。我想创建这个可以跨项目使用的小助手类,也许我也可以与我的朋友分享。所以我认为它应该能够像Postman一样,尽快确定错误。如果邮递员能做到,我也能。
EDIT2:很奇怪,今天我发现邮递员事先不知道服务器是否接受大请求,我上传了一个大文件,我看到它实际上将整个文件发送到服务器,直到得到响应。现在我不再相信自己了,为什么我认为邮递员提前知道错误,我一定是愚蠢的。但这确实意味着我找到了一种比 Postman 更好的方法来完成我的工作,所以我认为这个问题可能对某人有用。
狐的传说
PIPIONE
相关分类