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

