如何在 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(例如,您的 ApiControllerSystem.Web.Http.ApiController

那么你的控制器方法就是

public HttpResponseMessage GetCars([FromUri] string make, [FromUri] string model) {
    ... code ...
}