我有一个返回文件的动作。它可以在用户的浏览器中打开它,也可以直接下载到它的PC上。
public async Task<IActionResult> Open(int Id, bool Download)
{
....
}
通过传统路由,我可以定义下载路径和打开文件:
// Download the file
routes.MapRoute(
name: "FileDownload",
template: "File/Download/{id}",
defaults new { controller "File", action = "Open" download = true });
// Open file in browser
routes.MapRoute(
name: "FileView",
template: "File/View/{id}",
defaults new { controller "File", action = "Open" download = false });
我正在考虑切换到基于属性的路由。我想知道如果下载参数不是路径路径的一部分,是否有任何方法可以指定默认值。
[Route("[File/View/{id}", Name="FileView")]
[Route("[File/Download/{id}", Name="FileDownload")]
答案 0 :(得分:1)
我不确定它是否可以直接使用,但为什么不简单地使用重载?
你会有这样的事情:
[Route("[File/View/{id:int}", Name="FileView")]
public async Task<IActionResult> View([FromRoute] int id)
{
return await Open(id, false);
}
[Route("[File/Download/{id:int}", Name="FileDownload")]
public async Task<IActionResult> Download([FromRoute] int id)
{
return await Open(id, true);
}
private async Task<IActionResult> Open(int Id, bool Download)
{
....
}