创建路由以接受特定控制器的两个参数

时间:2012-04-25 00:21:58

标签: c# asp.net asp.net-mvc

我的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

但如果我导航到

,我会感觉它有用
  

/Files/Download/123/myimage.png

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

1 个答案:

答案 0 :(得分: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
);

然后您的控制器操作应该按照您当前定义的那样工作。