0

我的 FilesController 中有这个控制器方法:

public ActionResult Download(int id, string filename)
{
    var file = _filesRepository.GetFile(id);

    // Write it back to the client
    Response.ContentType = file.FileMimeType;
    Response.AddHeader("content-disposition", "attachment; filename=" + file.FileName);
    Response.BinaryWrite(file.FileData);

    return new EmptyResult();
}

如果我导航到

/Files/Download/123?filename=myimage.png

但是,如果我导航到,我希望它可以工作

/文件/下载/123/myimage.png

我知道我需要为此创建一个自定义路线,但我尝试过的一切都不起作用。我希望它只接受 FilesController 和 Download 方法的两个参数。那可能吗?

4

1 回答 1

4

是的,如果您创建一条新路线,这非常容易。在您的Global.asax.cs文件中,在默认路由之前,添加以下路由:

routes.MapRoute(
  "FileDownload", // Route name
  "Files/Download/{id}/{filename}", // URL with parameters
  new { 
    controller = "Files", 
    action = "Download", 
    id = UrlParameter.Optional, 
    filename = UrlParameter.Optional 
  } // Parameter defaults
);

然后你的控制器动作应该像你当前定义的那样工作。

于 2012-04-25T00:31:30.303 回答