我有一个博客类型的网站(由3DBuzz视频教程指导),后端(用于管理目的)和前端。在后端和前端,用户都应该能够下载文件。
前端和后端的操作:
public ActionResult Download(string filename)
{
var filepath = System.IO.Path.Combine(Server.MapPath("~/Content/Files/"), filename);
if (!System.IO.File.Exists(filepath))
return HttpNotFound();
return File(filepath, MimeMapping.GetMimeMapping(filepath), filename);
}
前端视图(@ Url.Action在前端和后端都是相同的):
@foreach (var file in Model.Post.Files)
{
<a class="list-group-item file-download" href='@Url.Action("Download", "Posts", new { filename = file.FileName } )' id="@file.FileName">
<span class="name">@file.FileName</span>
</a>
}
我没有为此操作配置任何路由。 问题是在后端生成了url,我可以下载文件
<a class="file-link" href="/admin/Posts/Download?filename=putty.exe">putty.exe</a>
但是当我想从前端下载时......没有生成链接:
<a class="list-group-item file-download" id="putty.exe">
<span class="name">putty.exe</span>
</a>
如果我在routeConfig中创建路线:
routes.MapRoute("DownloadFile", "downloadFile/{filename}", new { controller = "Posts", action = "Download" }, namespaces);
生成的链接是:
<a class="list-group-item file-download" href="/downloadFile/putty.exe" id="putty.exe">
<span class="name">putty.exe</span>
</a>
但是当我点击此链接时,我得到了404 Not Found
答案 0 :(得分:0)
确保以集成模式运行您的网络应用程序,并将以下内容添加到global.asax
:
routes.RouteExistingFiles = true;
您可能希望通过将以下行添加到global.asax来从路由中排除Content文件夹中的文件:
routes.IgnoreRoute("Content/{*pathInfo}");
答案 1 :(得分:0)
最终弄清楚了,我的路由管理员没有正确配置。