Rest Web API Core 3.1中的参数绑定(字符串到int)
我的控制器中有两个GET方法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路由不匹配字母约束只接受字母,不接受数字。您必须将约
[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