how to add default parameters to attribute routes in asp.net mvc

后端 未结 2 1274
無奈伤痛
無奈伤痛 2021-01-19 04:47

I am trying to change this convention based route:

routes.MapRoute(
    \"MovieByReleaseDate\",
    \"movies/released/{year}/{month}\",
    new { controller          


        
相关标签:
2条回答
  • 2021-01-19 05:19

    You can use multiple [Route] attributes coupled with nullable parameters to achieve your goal.

    [HttpGet]
    [Route("movies/released/")]
    [Route("movies/released/{year}")]
    [Route("movies/released/{year}/{month}")]
    public string Test(int? year = 2018, int? month = 1)
    {
        return "The year is " + year;
    }
    

    When you send a request to movies/released without a year, the default value is used for the year. When you send a request to movies/released/2000, the URL parameter overrides the default value.

    0 讨论(0)
  • 2021-01-19 05:22

    You can define route constriants in attributte routing to allow only some value

    [Route("movies/released/{year:regex(2015|2016)}/{month:regex(\\d{2}):range(1,12)}")]
        public ActionResult ByReleasedDate(int year, int month)
        {
            return Content($"year {year} and month {month}");
        }
    

    by using {year:regex(2015|2016)} it allows only 2015 or 2016 in year parameter

    by using {month:regex(\\d{2}):range(1,12)} it allows only 2 digit for month and range from 1 to 12

    Hope this helps

    0 讨论(0)
提交回复
热议问题