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

本文关键字:参数 两个 控制器 路由 创建 | 更新日期: 2023-09-27 18:32:20

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

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?文件名=myimage.png

但我希望它能工作,如果我导航到

/

files/download/123/myimage.png

我知道我需要为此创建自定义路线,但我尝试过的所有方法都不起作用。我希望它只接受文件控制器和下载方法的两个参数。这可能吗?

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

是的,如果您创建新路由,这很容易。 在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
);

然后,控制器操作应按当前定义的方式工作。