首页 > 解决方案 > ASP.NET Core 路由匹配第一部分与通配符结尾

问题描述

我想定义一个只需要匹配前几个段的路由,而忽略其余的:

[Route("public/portfolio/{publicPortfolioId}")]

这个想法是任何以开头的东西public/portfolio/myid都会匹配。这应该导致匹配:

public/portfolio/myid
public/portfolio/myid/something
public/portfolio/myid/something/that/doesnt/exist

标签: asp.netasp.net-core

解决方案


使用包罗万象的参数。

[Route("public/portfolio/{publicPortfolioId}/{*remainder}")]

您可以通过以下两种方式使用它。

忽略余数:

[Route("public/portfolio/{publicPortfolioId}/{*remainder}")]
public IActionResult DemoAction(int publicPortfolioId) 
{
    return Json(new 
    { 
        publicPortfolioId 
    });
}

捕获其余部分:

[Route("public/portfolio/{publicPortfolioId}/{*remainder}")]
public IActionResult DemoAction(int publicPortfolioId, string remainder)
{
    return Json(new
    {
        publicPortfolioId,
        remainder
    });
}

另请参阅:https ://docs.microsoft.com/en-us/aspnet/core/fundamentals/routing?view=aspnetcore-2.1


推荐阅读