我开始创建一个构建我的网址的UrlHelperExtension类,就像这样
"/Home/DownloadFiles?directory="+directory+"&filename"+HttpUtility.UrlEncode(filename)
但我想为什么不使用mvc来构建我的网址,所以在我看来我做了
href="@Url.Action("DownloadFiles","Home", new {directory = "files", filename="1.mp3"}"
但那是输出/Home/DownloadFiles/files/1.mp3找不到文件(我得到404)。我的行动方法是
public ActionResult DownloadFiles(string directory, string filename){
//log which file is downloaded by who
//Add download header content-disposition attachement
//Send response with the file
return null;
}
我唯一的路线就是这个
routes.MapRoute(
name:"Default",
url: "{controller}/{action}/{directory}/{filename}",
defaults: new {controller = "Home", action = "Index", directory = UrlParameter.Optional, filename = UrlParameter.Optional}
)
我认为我有一些问题真正理解路线,因为我不知道如何解决这个问题所以我不必使用我的扩展类,这实际上并没有做太多。也许我不应该使用URL.Action? Url.Action UrlEncode文件名参数?目录参数只有1“深”所以它不能是abc / def只有abc而且我添加了相关的部分所以我不担心UrlEncoding它。
答案 0 :(得分:0)
你得到404,不是因为你的路线有问题(看起来很好),而是因为路径/Home/DownloadFiles/files/282.mp3
正在被处理为静态文件,当然不存在
尝试将以下内容添加到web.config
<configuration>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true" />
</system.webServer>
</configuration>
<强>更新强>
如果表现有问题。将其添加到您的web.config
:
<system.webServer>
<handlers>
<add name="Mp3FileHandler" path="*.mp3" verb="GET" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>
</system.webServer>