ASP.NET Core 路由匹配带有通配符结尾的第一部分

blg*_*boy 5 asp.net asp.net-core

我想定义一条只需要匹配前几个段的路线,并忽略其余部分:

[Route("public/portfolio/{publicPortfolioId}")]
Run Code Online (Sandbox Code Playgroud)

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

public/portfolio/myid
public/portfolio/myid/something
public/portfolio/myid/something/that/doesnt/exist
Run Code Online (Sandbox Code Playgroud)

Sha*_*tin 7

使用包罗万象的参数。

[Route("public/portfolio/{publicPortfolioId}/{*remainder}")]
Run Code Online (Sandbox Code Playgroud)

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

忽略其余部分:

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

捕获余数:

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

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