【问题标题】:Resolve a partial/incomplete Route in a View解决视图中的部分/不完整路由
【发布时间】:2020-08-21 13:47:22
【问题描述】:

我有一个位于 /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

有没有办法让我只返回/api/Test/Foo/(稍后由 JavaScript 使用)?

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

【问题讨论】:

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


    【解决方案1】:

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

    控制器

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

    查看

        @(Url.RouteUrl("TestRouteName"))
    

    访问视图的网址

        api/Test/Foo?id=1234
    

    或者您可以使用以下内容来获得您想要的。

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

    【讨论】:

      【解决方案2】:

      为了不为您的路由参数id 提供任何内容(null),您应该在名称(reference)后面加上问号?

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

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

      【讨论】:

        猜你喜欢
        • 2021-06-14
        • 2013-04-09
        • 1970-01-01
        • 1970-01-01
        • 2019-07-27
        • 2013-05-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多