【问题标题】:Asp net core routing multiple parametersasp net core路由多个参数
【发布时间】:2020-08-25 21:25:18
【问题描述】:

我正在尝试路由 asp.net 核心应用程序。

我有这种情况:

[Route("/{user}")]
public IActionResult FirstAction(string user)
{
    // Code
}

[Route("/{user}/{project}")]
public IActionResult SecondAction(string user, string project)
{
    // Code 2
}

我遇到的问题是,当用户转到链接 /something 时,它会触发两种方法(// Code 1// Code 2),但我只想触发第一个。

我怎样才能做到这一点?

【问题讨论】:

  • 嗯,应该不能运行 2 个动作吧?您能否通过例如查看操作中的实际请求 URL HttpContext.Request?
  • 让第一个斜线消失
  • 我不想要多个操作,我只想在不使用?user= 的情况下传递多个参数。与github.com/{organization}/{project}上的行为相同
  • 这就是我回答的原因。 ?user 替换为其余路径 /users

标签: c# asp.net-core


【解决方案1】:

使用更好的 REST API 路由

[Route("/users/{user}")]

[Route("/users/{user}/projects/{project}")]

【讨论】:

  • 我想要和github.com/{organization}/{project}一样的行为
  • 这也是API路由吗?或者你正在浏览器中的那个?因为浏览器里的那个是在别的地方管理的
  • 是浏览器路由
  • 但是您的问题是关于 API 路由的?在那种情况下,它们是不同的。而且您可以维护与用户所见以及后端服务器发生的情况不同的路由约定......浏览器路由可以通过多种不同方式进行操作。但是对于 API,我保留了对我提供的答案的建议
【解决方案2】:

你确定这两个动作都被触发了吗?您使用的是哪个版本的 ASP NET Core?

我测试了以下内容:

    [HttpGet("/{user}")]
    public ActionResult<string> Test1(string user)
    {
        return "User " + user;
    }

    [HttpGet("/{user}/{project}")]
    public ActionResult<string> Test2(string user, string project)
    {
        return "User " + user + " Project " + project;
    }

明确的路线。如果只有一个字符串 Test1 被路由。如果有两个字符串 Test2 被路由。


此外,请注意以下几点:如果您将前导 / 放入路由中,则任何前缀都将被忽略。

【讨论】:

    猜你喜欢
    • 2017-04-22
    • 2021-01-11
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    • 2021-10-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多