Rest Web API Core 3.1中的参数绑定(字符串到int)

Rest Web API Core 3.1中的参数绑定(字符串到int),rest,asp.net-core-3.1,webapi,Rest,Asp.net Core 3.1,Webapi,我的控制器中有两个GET方法 [HttpGet("{userId:int}", Name= nameof(GetUserById))] GetUserById 及 不幸的是,存在一个名为“007”的用户。当我调用时,第一个方法被调用,因为系统将其视为值为7的整数 有没有任何可能的方法可以将请求定向到第二个方法,而不将其作为查询参数 我调用,第一个方法被调用,因为系统将其视为值为7的整数 由于路由约束,指定的URL与GetUserByName路由不匹配字母约束只接受字母,不接受数字。您必须将约

我的控制器中有两个GET方法

[HttpGet("{userId:int}", Name= nameof(GetUserById))]
GetUserById 

不幸的是,存在一个名为“007”的用户。当我调用时,第一个方法被调用,因为系统将其视为值为7的整数

有没有任何可能的方法可以将请求定向到第二个方法,而不将其作为查询参数

我调用,第一个方法被调用,因为系统将其视为值为7的整数

由于路由约束,指定的URL与
GetUserByName
路由不匹配<代码>字母约束只接受字母,不接受数字。您必须将约束更改为接受参数中的数字的限制性较小的约束,或者完全删除约束。见:

区分这两者最可靠的方法是使用不同的模板:

[HttpGet("{userId:int}", Name= nameof(GetUserById))] // leave it as is
GetUserById

<...>
[HttpGet("name/{name}", Name=nameof(GetUserByName))] // add segment to route
GetUserByName
[HttpGet(“{userId:int}”,Name=nameof(GetUserById))]//保持原样
GetUserById
[HttpGet(“name/{name}”,name=nameof(GetUserByName))]//将段添加到路由
GetUserByName
ASP.NET路由器不知道“007”应该被转换为字符串,仅仅因为存在这样的用户。您的意图应该更加具体,如果参数值可以匹配多个端点,则创建不同的端点路由。所以,路由器会将请求路由到正确的操作,而不是试图找到可能不是您的最佳匹配的最佳匹配

[HttpGet("{userId:int}", Name= nameof(GetUserById))] // leave it as is
GetUserById

<...>
[HttpGet("name/{name}", Name=nameof(GetUserByName))] // add segment to route
GetUserByName