Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

asp.net mvc routing with multiple optional parameters did not work

I wrote a attribute route Route("Home/{category?}/{Subcategory?}/List") want to match the following examples /Home/C1/S1/List, /Home/C1/List, /Home/List

But only to match the first url, the optional parameter did not work. How to use a routing rule matches the above three examples?

public class HomeController : Controller
{
    public IActionResult Index()
    {
        return View();
    }

    [Route("Home/{category?}/{subcategory?}/List")]
    public IActionResult List(Category? category = null, SubCategory? subcategory = null)
    {
        return Content(category.ToString() + "/" + subcategory.ToString());
    }

    [Route("Home/{code}/Detail")]
    public IActionResult Detail(string code)
    {
        return Content(code);
    }
}


public enum Category
{
    C1,
    C2,
    C3,
    C4
}

public enum SubCategory
{
    S1,
    S2,
    S3,
    S4
}

Similar Questions

Routing optional parameters in ASP.NET MVC 5

MVC routing with one fixed action and controllers with multiple optional parameters

like image 931
jiangzm Avatar asked Jun 02 '16 03:06

jiangzm


2 Answers

If a route does not work, it can be done using three routing rules.

[Route("Home/List")]
[Route("Home/{category}/List")]
[Route("Home/{category}/{subcategory}/List")]

thx all.

like image 97
jiangzm Avatar answered Oct 06 '22 12:10

jiangzm


You may only have one optional parameter per route, and that optional parameter must be the last parameter.

see https://exceptionnotfound.net/asp-net-core-demystified-routing-in-mvc/

like image 5
Michal Zemek Avatar answered Oct 06 '22 13:10

Michal Zemek