You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET MVC中如何为特性路由添加默认参数?

特性路由中定义默认参数的正确姿势

嘿,刚好对这个很熟悉!先给你理清楚关键点:

你原来的约定式路由里,new { controller = "Movies", action = "ByReleasedDate" }这部分默认值,在特性路由里其实不需要额外配置——因为你把[Route]特性直接加在MoviesController的ByReleasedDate方法上时,ASP.NET已经自动把这个动作和对应的控制器绑定了,这部分默认值就自然生效啦。

如果是要给year和month这两个路由参数设置默认值,方法超简单,直接在路由模板里用{参数名=默认值}的格式就行,下面给你几个实用的示例:

示例1:给路由参数设置固定默认值

比如你想默认年份为2024,月份为10,特性路由可以这么写:

[Route("movies/released/{year=2024}/{month=10}")]
public IActionResult ByReleasedDate(int year, int month)
{
    // 你的业务逻辑代码
    return View();
}

这样用户访问/movies/released时,会自动用2024和10作为参数;访问/movies/released/2023时,month会用默认的10;访问/movies/released/2023/5就用传入的参数值。

示例2:结合控制器级路由简化写法

如果你的控制器已经标记了基础路由(比如[Route("movies")]),可以把动作的路由拆分开,让代码更简洁:

[Route("movies")]
public class MoviesController : Controller
{
    // 其他动作方法...

    [Route("released/{year=2024}/{month=10}")]
    public IActionResult ByReleasedDate(int year, int month)
    {
        return View();
    }
}

这时候完整的路由就是movies/released/{year=2024}/{month=10},效果和上面完全一样,还能复用控制器的基础路径。

额外小技巧:可选参数的处理

如果想让参数可选(允许用户不传入),除了在路由模板里设默认值,还可以给参数加?,同时把方法参数设为可空类型或者给方法参数加默认值,比如:

[Route("movies/released/{year?}/{month?}")]
public IActionResult ByReleasedDate(int year = 2024, int month = 10)
{
    return View();
}

这种方式和在路由模板里设默认值效果差不多,你可以根据自己的习惯选就行。

内容的提问来源于stack exchange,提问作者Anooshiravan Keshavarzi Arshad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 10:02:37