MVC 4.5 URL.Action和路由

时间:2015-08-20 23:07:05

标签: asp.net-mvc asp.net-mvc-4 routes razor-2

我开始创建一个构建我的网址的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它。

1 个答案:

答案 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>