带有多个可选参数的asp.net mvc路由不起作用

时间:2016-06-02 03:57:20

标签: c# asp.net asp.net-mvc asp.net-core asp.net-mvc-routing

我写了一个属性路由Route("Home/{category?}/{Subcategory?}/List")想要匹配以下示例 /Home/C1/S1/List/Home/C1/List/Home/List

但只是为了匹配第一个url,可选参数不起作用。 如何使用路由规则匹配上述三个示例?

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
}

类似问题

Routing optional parameters in ASP.NET MVC 5

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

2 个答案:

答案 0 :(得分:8)

如果路线不起作用,可以使用三个路线规则来完成。

unset($_SESSION['Products']);
//or
$_SESSION['Products'] = "";
总而言之。

答案 1 :(得分:0)

每个路由上只能有一个可选参数,并且该可选参数必须是最后一个参数。

请参阅 1