我的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方法的两个参数。这可能吗?
答案 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
);
然后您的控制器操作应该按照您当前定义的那样工作。