我正在尝试使用Web API来处理以下请求...
请注意,?name=
是搜索查询,而不是检索特定资源。所以也可以是?name=xyz&city=Atlanta
或类似的东西。
GET http://localhost/api/customer?name=xyz
[Route("customer")]
public class CustomerController : ApiController
{
[Route("{name:alpha}")]
public IHttpActionResult Get([FromUri]string name)
{
return Json(name);
}
}
如果我从路由约束中删除:alpha
,这似乎有效,否则我得到404.我需要能够约束查询参数(如果可能的话)。
或者,有没有更好的方法让Web API匹配带有查询字符串的路由?
答案 0 :(得分:0)
为什么不使用
[Route("customer")]
public class CustomerController : ApiController
{
[Route("{name/alpha}")]
public IHttpActionResult Get([FromUri]string name)
{
return Json(name);
}
}
并将网址更改为:
GET http://localhost/api/customer/name/alpha
答案 1 :(得分:0)
从您的查询字符串中,您传递的是name的值,因此当您删除:alpha时,您的查询字符串与路径匹配并且有效。
将其更改为
[Route("customer")]
public class CustomerController : ApiController
{
[Route("name/{alpha}")]
public IHttpActionResult Get([FromUri]string alpha)
{
return Json(alpha);
}
}
然后会有效:
GET http://localhost/api/customer/name/xyz
OR
[Route("customer")]
public class CustomerController : ApiController
{
[Route("{name}")]
public IHttpActionResult Get([FromUri]string name)
{
return Json(name);
}
}
然后您不需要在网址中指定名称,您可以这样调用它:
GET http://localhost/api/customer/xyz
答案 2 :(得分:0)
您班级上方的标签应该是[RoutePrefix]而不是[Route]。 api路由的工作方式是/ api / RoutePrefix / Route?parameterName = XXXX。控制器的routeprefix是“customer”,路由是“name”(参数的名称),所以你想做:
/api/customer/name?name=XXXX
所以这样:
[RoutePrefix("api/customer")]
public class CustomerController : ApiController
{
[Route("{name:alpha}")]
public IHttpActionResult Get([FromUri]string name)
{
return Json(name);
}
}