如何区分查询参数和路径参数

Vít*_*ins 7 c# rest asp.net-web-api

我想在我的api上使用GET方法,其中一个方法是带路径参数的路径:

API /人/ {} PERSONID

和一个带有查询参数的路线:

API /人?文=东西

但如果我把这个代码:

// GET: api/people/{personId}
[Route("api/people/{personId}")]
[HttpGet]
public HttpResponseMessage Get(long personId)
{
}

// GET: api/people?text=something
[Route("api/people")]
[HttpGet]
public HttpResponseMessage Get(string text)
{
}
Run Code Online (Sandbox Code Playgroud)

然后尝试打开/ api/people/1它说错误的格式,当我尝试打开/ api/people?text =它有效的东西.

我只定义了默认路由:

    config.Routes.MapHttpRoute(
        name: "DefaultApi",
        routeTemplate: "api/{controller}/{id}",
        defaults: new { id = RouteParameter.Optional }
    );
Run Code Online (Sandbox Code Playgroud)

我怎么能让他们都工作?定义如果它是一个路径参数转到第一个,如果它是一个查询参数转到第二个?

Mr.*_*. B 5

我刚刚使用 Web API 2 将其放入 Visual Studio 2015 中,并且运行良好。我确实必须添加以下几行(每个控制器方法各一行)。

return Request.CreateResponse(HttpStatusCode.OK);
Run Code Online (Sandbox Code Playgroud)

我还取消了默认路由配置。以下网址工作得很好

http://localhost:64377/api/people/1

http://localhost:64377/api/people?text=你好

当我将这些 URL 放入 IE 中时,我在控制器中点击了这两个相应的方法。