如何在将参数传递给 MVC 控制器中的方法时防止 Url 编码
本文关键字:方法 编码 Url 控制器 参数传递 MVC | 更新日期: 2024-11-08 08:38:49
C# Web MVC + Angular
我的网页上有以下链接:
<a ng-show="channel.ArtistImagepath != null" ng-href="/channel/DownloadImageFile/?filepath={{channel.ArtistImagepath}}" target="_blank"><i class="fa fa-download" style="color: green"></i> Artist Image</a><br/>
当我在浏览器中复制链接时,它是:
//mysite/channel/DownloadImageFile/?filepath=ChannelUploads/b51535d5-4ea3-45ae-bda4-332a0ce19ee8Artist+Gomez.jpg
当我单击链接时,发送到控制器的文件路径是:频道上传/b51535d5-4ea3-45ae-bda4-332a0ce19ee8艺术家迪娜·戈麦斯.jpg
如您所见,由于 URL 已编码,因此文件名中的 + 号被替换为空格。这会导致"找不到文件"错误消息。.我的服务器上存在的实际文件名是:b51535d5-4ea3-45ae-bda4-332a0ce19ee8艺术家+戈麦斯.jpg
public ActionResult DownloadImageFile(string filepath)
{
filepath = "https://marvment.com/" + filepath;
var type = new System.Net.Http.Headers.MediaTypeHeaderValue("application/octet-stream");
var path = Path.GetFileName(filepath);
path = HttpUtility.UrlEncode(path);
//path = ToUrlFriendlyString(path);
using (var client = new WebClient())
{
var buffer = client.DownloadData(filepath);
return File(buffer, type.ToString(), path);
}
}
在将文件名发送到我的控制器之前,如何防止文件名被 URL 编码?我想在文件名中保留 + 号并在我的 MVC 控制器中处理编码。
如何防止文件名在发送前被编码为良性 URL 它到我的控制器?
实际上,您需要做的恰恰相反:确保您的URL参数(文件名)在首先提供给浏览器之前已进行URL编码。在这种情况下,这应该在 Angular 中完成;请参阅如何使用 AngularJS 生成 url 编码的锚链接?
您无法在控制器操作中正确解决此问题,因为当操作获取文件名时,它已自动为您解码。