在使用.Net WebClient下载文件名包含特定字符的文件时,我收到了一个错误“400-Bad请求”:
例如,如果文件名为: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:\程序文件(x86)\IIS Express\http%3a%2f%2flocalhost%3a1832%2fVideoUploads%2f5L1XQE6FTest+%23.mp4‘
如何在下载具有特殊字符或保留字符的文件时解决不良请求错误?
发布于 2015-05-08 15:59:09
在您的代码中什么时候会出现实际引发的异常?WebClient在下载任何有效命名的资源时应该没有问题(因为它实际上作为一个URL起作用)。如果您试图使用的URL实际上不是一个有效的URL (由于奇怪的文件名),则URL编码可能足以解决这个问题。
但是,您稍后也会使用坏文件名作为File的参数,这可能是个坏主意。如果这是引发异常的地方,那么只需构造您自己的文件名就可以解决这个问题,而不需要使用有问题的字符。
发布于 2018-11-09 16:18:15
请用%23替换#,它会工作的。
https://stackoverflow.com/questions/30127929
复制相似问题