C# 在视图中解析部分/不完整的管线

C# 在视图中解析部分/不完整的管线,c#,asp.net-core,asp.net-core-mvc,asp.net-core-3.1,asp.net-core-routing,C#,Asp.net Core,Asp.net Core Mvc,Asp.net Core 3.1,Asp.net Core Routing,我有一个API控制器,它位于/API/Test/Foo/1234 [Area("Api")] [ApiController] [Route("/api/[controller]/[action]")] public class TestController : ControllerBase { [HttpGet("{id}", Name= "TestRouteName")] public IActionResult Foo(int id) { ...

我有一个API控制器,它位于
/API/Test/Foo/1234

[Area("Api")]
[ApiController]
[Route("/api/[controller]/[action]")]
public class TestController : ControllerBase
{
    [HttpGet("{id}", Name= "TestRouteName")]
    public IActionResult Foo(int id)
    {   
        ....
    }
}
在一个视图中,我可以使用
@URL.RouteUrl(“TestRouteName,new{id=1234})”将此URL正确解析为
/api/Test/Foo/1234

[Area("Api")]
[ApiController]
[Route("/api/[controller]/[action]")]
public class TestController : ControllerBase
{
    [HttpGet("{id}", Name= "TestRouteName")]
    public IActionResult Foo(int id)
    {   
        ....
    }
}
有没有一种方法可以让我直接返回
/api/Test/Foo/
(稍后由JavaScript使用)

我尝试过
@Url.RouteUrl(“UserProfile”)
但这会返回一个空字符串,
@Url.Action(“Foo”,“Test”,new{area=“api”}
返回
/Test/Foo?area=api

,以便不允许为路由参数
id
指定任何内容(null),您应该在名称():


但是,请注意,如果不将
int-id
参数设置为空,则访问路由时,
id
的默认值将为
0

问题在于,默认的“id”路由实际上是将其添加到url中,而不是将其用作查询参数。请尝试以下操作

控制器

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

    @(Url.RouteUrl("TestRouteName"))
    api/Test/Foo?id=1234
访问视图的Url

    @(Url.RouteUrl("TestRouteName"))
    api/Test/Foo?id=1234
或者你可以用下面的方法得到你想要的

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