如何在 ASP.NET 中的同一路由上使用多个 GET 方法?
How do I use multiple GET methods on the same route in ASP.NET?
假设我在 ASP.NET 中有这样的资源:
/api/cars
并且我想公开有关待售汽车的信息。我想通过两种方式公开它:
/api/cars?model=camry
/api/cars?make=toyota
我可以对其中之一进行搜索,但不能同时对两者进行搜索,因为它们的签名是相同的。我在 .NET 4.5 中使用 ApiController:如何在同一资源上实现这两种搜索?
您可以使用可为空的输入参数。由于您使用的是字符串,因此您甚至不必将它们声明为可为空。请参阅 this SO 文章。要点是
public ActionResult Action(string model, string make)
{
if(!string.IsNullOrEmpty(model))
{
// do something with model
}
if(!string.IsNullOrEmpty(make))
{
// do something with make
}
}
如链接的 SO 文章中所述,以下任何路线都将指导您采取正确的行动:
- 获取/api/cars
- GET /api/cars?make=丰田
- GET /api/cars?model=凯美瑞
- GET /api/cars?make=toyota&model=camry
Here 是关于该主题的另一篇不错的 SO 文章。
我假设您正在使用 WebApi(例如,您的 ApiController
是 System.Web.Http.ApiController
)
那么你的控制器方法就是
public HttpResponseMessage GetCars([FromUri] string make, [FromUri] string model) {
... code ...
}
假设我在 ASP.NET 中有这样的资源:
/api/cars
并且我想公开有关待售汽车的信息。我想通过两种方式公开它:
/api/cars?model=camry
/api/cars?make=toyota
我可以对其中之一进行搜索,但不能同时对两者进行搜索,因为它们的签名是相同的。我在 .NET 4.5 中使用 ApiController:如何在同一资源上实现这两种搜索?
您可以使用可为空的输入参数。由于您使用的是字符串,因此您甚至不必将它们声明为可为空。请参阅 this SO 文章。要点是
public ActionResult Action(string model, string make)
{
if(!string.IsNullOrEmpty(model))
{
// do something with model
}
if(!string.IsNullOrEmpty(make))
{
// do something with make
}
}
如链接的 SO 文章中所述,以下任何路线都将指导您采取正确的行动:
- 获取/api/cars
- GET /api/cars?make=丰田
- GET /api/cars?model=凯美瑞
- GET /api/cars?make=toyota&model=camry
Here 是关于该主题的另一篇不错的 SO 文章。
我假设您正在使用 WebApi(例如,您的 ApiController
是 System.Web.Http.ApiController
)
那么你的控制器方法就是
public HttpResponseMessage GetCars([FromUri] string make, [FromUri] string model) {
... code ...
}