使用FromQuery的Web API .net核心属性路由

时间:2018-10-24 07:56:14

标签: asp.net-core-webapi

我在下面的代码中实现了Web API(.net Framework 4.5.2)。当我拨打电话“ http://localhost:3000/123”时-它会获取ID为123的用户详细信息。 如果我输入“ http://localhost:3000/Class1/?status=Active”,则会获取属于第1类且状态为“活动”的用户详细信息。转换为.net核心时,即使提到了FromQuery,调用始终转到“:http://localhost:3000/123

$ARGV[1]

请让我知道如何在不更改路由参数的情况下解决此问题。

1 个答案:

答案 0 :(得分:0)

简单来说,您在这里有两条相互冲突的路线。该框架无法知道要路由到哪个框架,因此仅采用第一个框架。正如@Nkosi指出的那样,如果您可以对参数施加某种约束,那将有所帮助。您可能无法仅将整数进行限制,但是也许有一个特定的正则表达式,例如,它只能匹配一个或另一个。您可以在relevant docs中看到用于约束路线参数的选项。

如果没有明确的限制,您可以申请也不会匹配的其他限制,那么您在这里大多不走运。您可以简单地将其中一条路线更改为更明确的路线,例如[HttpGet("group/{group}")]。如果路由绝对必须相同,则您唯一的选择是让一个动作处理两种情况,并根据某些因素分支代码。

[HttpGet("{id}")]
public object Get(string id, Status? status = null)
{
   if (status.HasValue)
   {
       // Note: treat `id` as `group` here.
       // Get the User list from the group and whose status is active
   }
   else
   {
       return repository.GetUser(id) ?? NotFound();
   }
}

那可能不是最好的方法(分支地位),但这只是一个例子。您需要决定哪种方法最适合您。