2014-01-19 103 views
1

我有一個博客類型網站(由3DBuzz視頻教程指導)和一個後端(用於管理目的)和一個前端。在後端和前端,用戶應該能夠下載文件。ASP.NET @ Url.Action不會生成用於下載文件的鏈接

兩者的前端和後端的操作:

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未找到

回答

0

確保運行在集成模式下你的web應用,並添加以下到您的global.asax

routes.RouteExistingFiles = true; 

你可能想通過在global.asax中添加以下行來排除Content文件夾中的文件:

routes.IgnoreRoute("Content/{*pathInfo}"); 
+0

感謝您的快速響應。我沒有任何運氣做了修改。 – user3211794

0

甚至可以將其映射出來實際上,我沒有正確配置管理員的路由。