我在使用.net webclient下载包含某些字符的文件名下载文件时会遇到错误" 400 - 不良请求":
例如,如果文件为命名: 5L1XQE6FTest #.mp4
;这会产生错误。
如果我删除了#
签名,则文件的下载正常:
这是我的代码:
public ActionResult DownloadVideoFile(string filepath)
{
try
{
filepath = "http://localhost:1832/VideoUploads/" + filepath;
var type = new System.Net.Http.Headers.MediaTypeHeaderValue("application/octet-stream");
var path = Path.GetFileName(filepath);
using (var client = new WebClient())
{
var buffer = client.DownloadData(filepath);
return File(buffer, type.ToString(), path);
}
}
catch (Exception e)
{
var test = e.Message;
}
return null;
}
我无法控制我要下载的文件名,因为提交了文件。
当我URL编码文件时,我会得到"找不到文件"错误:
using (var client = new WebClient())
{
filepath = Url.Encode(filepath);
var buffer = client.DownloadData(filepath);
return File(buffer, type.ToString(), path);
}
这是URL编码之后的路径:
c: program文件(x86) iis express http%3A%2f%2f%2flocalhost%3A1832%2FVIDEOUPLOADS%2F5L1XQE6FTEST %23.mp4'
在下载具有特殊字符或保留字符的文件时,如何解决不良请求错误?
在您的代码中什么时候实际提出了例外?WebClient
应该没有问题下载任何有效命名的资源(如它在其上实际上是URL的作用)。如果您要使用的URL实际上是不是有效的URL(由于奇数文件名),则编码URL可能足以解决该问题。
但是,稍后您还将不良文件名用作File
的参数,这可能是一个坏主意。如果这是提出异常的地方,只需构建自己的文件名而没有问题的字符,就应该足以解决问题。
请用%23替换#它将起作用。