【问题标题】:How to distinguish query parameters from path parameters如何区分查询参数和路径参数
【发布时间】:2015-10-07 22:08:30
【问题描述】:

我想在我的 api 上获取方法,一个带有路径参数的 Route:

api/people/{personId}

还有一个带有查询参数的Route:

api/people?text=something

但如果我输入这段代码:

// 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)
{
}

然后尝试打开 /api/people/1,它说格式错误,当我尝试打开 /api/people?text=something 时,它可以工作。

我只定义了默认路由:

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

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

【问题讨论】:

  • long 更改为int 会发生什么? (出于好奇)。不过,好问题。我不确定答案(还)。我不会认为您在查看此代码时会遇到任何问题。
  • 我已经用 Web API 2.2 测试了这个确切的场景并且它可以工作。我认为您使用的是旧的 Web API 版本。
  • @JayMee longint 结果是一样的
  • @WouterHuysentruit 我将 Web API 2.2 与 Microsoft Visual Studio Ultimate 2013 一起使用,但它不起作用。
  • 正如B先生在他的回答中所说,我也没有包括手动路线,也许这是问题所在?

标签: c# rest asp.net-web-api


【解决方案1】:

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

return Request.CreateResponse(HttpStatusCode.OK);

我还删除了默认路由配置。以下网址可以正常工作

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

http://localhost:64377/api/people?text=Hello

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

【讨论】:

  • 这行得通我猜问题是默认路由配置,谢谢伙计! ;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-11
  • 1970-01-01
  • 2010-11-10
  • 1970-01-01
  • 2021-11-15
相关资源
最近更新 更多