WebApi区分带参数的路由



如果之前有人问过这个问题,我提前道歉,但是我找不到一个直接的答案来帮助我完全理解路由。

假设我们有以下场景:

1. api/users             Routes to Get() //Retrieves all users
2. api/users/{user}      Routes to Get(string user) //api/users/IE1
3. api/users/?user=IE1   ????????? Get(string user = null, string emailAddress=null...)

我想让2和3同时运行。我之所以这样做是因为3可以有多个查询参数,如用户的国家,电子邮件地址等。

现在2和3将与"发现多个符合请求的操作"当只有一个参数时。

是否有一种方法可以解决这个问题,而无需创建另一个路由,如/api/users/searchbyUser/,因为我试图在一个路由-用户上保持整洁?

实际上1和3会发生冲突,而不是2和3,因为在第3个get中只有可空参数。不带任何参数的Get(1)将与(3)所有可空值相同——签名没有区别。

你有多个选项要考虑,但我建议只有一个Get方法:您有一个方法(no 3),当user = null并且没有其他参数具有值时,您将返回所有用户(1)。如果其中任何一个参数有值,您可以根据查询值返回用户(如果您愿意,就像2和3的组合)。

最新更新