属性路由 - 我可以为不在路由中的参数指定默认值

时间:2018-02-23 00:35:37

标签: c# asp.net-core

我有一个返回文件的动作。它可以在用户的​​浏览器中打开它,也可以直接下载到它的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")]    

1 个答案:

答案 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)
{
    ....
}