C# 如何使用不同的参数名称注册路由?

C# 如何使用不同的参数名称注册路由?,c#,asp.net-core-mvc,C#,Asp.net Core Mvc,下面是一个非常简单的控制器,我将使用它作为示例: [ApiVersion("1.0")] public class ExampleController : ControllerBase { [HttpGet] [Ok(typeof(int))] public IActionResult A([FromRoute] int number) { return Ok(number); } [HttpGet]

下面是一个非常简单的控制器,我将使用它作为示例:

[ApiVersion("1.0")]
public class ExampleController : ControllerBase
{
    [HttpGet]
    [Ok(typeof(int))]
    public IActionResult A([FromRoute] int number)
    {
        return Ok(number);
    }

    [HttpGet]
    [Ok(typeof(bool))]
    public IActionResult B([FromRoute] bool state)
    {
        return Ok(state);
    }
}
在我的注册路由方法中,我说:

 configureRoutes.MapRoute("1", "{controller}/{action}/{number}", new {controller = "Example", action = "A"});
 configureRoutes.MapRoute("2", "{controller}/{action}/{state}", new {controller = "Example", action = "B"});
但问题是,虽然两个端点都可以路由到,但只有注册的第一个路由才能正确检索参数。在这种情况下,
state
将始终为
false
。如果我先注册
B
number
总是
0

如果我将
编号
状态
更改为
,那么它工作正常。是否有一种方法可以将
编号
状态
都包含在各自的路由模板中,或者要求所有路由具有相同的参数名称?如果每个端点必须具有相同的名称,那么具有多个路由参数的端点会是什么样子


此外,我知道如果我不提及这一点,有人会提出建议,我对属性路由不感兴趣。

尝试将预期类型添加到路由,即:

configureRoutes.MapRoute("1", "{controller}/{action}/{number:int}", new {controller = "Example", action = "A"});
configureRoutes.MapRoute("2", "{controller}/{action}/{state:bool}", new {controller = "Example", action = "B"});

检查路线约束

是否尝试将预期类型添加到路线?i、 e.:
configureRoutes.MapRoute(“1”,“{controller}/{action}/{number:int}”,new{controller=“Example”,action=“A”})。我假设在绘制路线图时也可以使用此方法。我知道它与属性路由一起工作。我很好奇。为什么您对属性路由不感兴趣?我可以从个人的经验告诉你,这会让你更容易找到东西。我厌倦了遇到这样的问题,于是继续往下说,再也没有回头看。@Jedi_Maseter_Sam:会不会有另一个控制器在执行某些操作时需要一个
数字
参数?如果您希望路由匹配多个控制器/操作,则应使用占位符。这对我来说非常具体(考虑到需要匹配参数)。@inasane_developer我认为这就成功了。你们知道在哪里可以找到约束类型的完整列表吗(枚举也很好)?@Jedi_Maseter_Sam你们可以看到路由约束。这是属性路由文档,但它也适用于您正在做的事情。