在视图中解析 partial/incomplete 路由

Resolve a partial/incomplete Route in a View

我有一个位于 /api/Test/Foo/1234

的 API 控制器
[Area("Api")]
[ApiController]
[Route("/api/[controller]/[action]")]
public class TestController : ControllerBase
{
    [HttpGet("{id}", Name= "TestRouteName")]
    public IActionResult Foo(int id)
    {   
        ....
    }
}

在一个视图中,我可以正确地将此 URL 与 @Url.RouteUrl("TestRouteName", new { id = 1234 }) 解析为 /api/Test/Foo/1234

有没有办法让我 return /api/Test/Foo/(稍后被 JavaScript 使用)?

我试过 @Url.RouteUrl("UserProfile") 但是这个 return 是一个空字符串,@Url.Action("Foo", "Test", new { area = "api" } returns /Test/Foo?area=api

为了不让你的路由参数id空值(null),你应该在名称(reference)后面加上一个问号?

[HttpGet("{id?}", Name= "TestRouteName")]
public IActionResult Foo(int id)
{   
    ....
}

但是请注意,如果您不使 int id 参数可为空,则在访问路由时 id 的默认值将是 0

问题是 "id" 的默认路由实际上是将其添加到 url,而不是将其用作查询参数。试试下面的方法。

控制器

    [HttpGet(Name = "TestRouteName")]
    public IActionResult Foo(int id)
    {
        .........
    }

查看

    @(Url.RouteUrl("TestRouteName"))

Url 访问视图

    api/Test/Foo?id=1234

或者您可以使用以下方法来获得您想要的。

    @(Url.Action("Foo", "Test"))