Предположим, у меня есть такой ресурс в ASP.NET:

/api/cars

И хочу выставить информацию об авто на продажу. Я хочу разоблачить его двумя способами:

/api/cars?model=camry

/api/cars?make=toyota

Я могу реализовать поиск по одному из них, но не по обоим одновременно, поскольку их подписи идентичны. Я использую ApiController в .NET 4.5: как реализовать оба поиска на одном ресурсе?

0
Scott Jordan 4 Мар 2015 в 00:28

2 ответа

Лучший ответ

Вы можете использовать входные параметры, допускающие значение NULL. Поскольку вы используете строки, вам даже не нужно объявлять их как допускающие значение NULL. См. эту статью 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
  • ПОЛУЧИТЬ / api / cars? Make = toyota
  • ПОЛУЧИТЬ / api / cars? Model = camry
  • ПОЛУЧИТЬ / api / cars? Make = toyota model = camry

Вот еще одна хорошая статья SO на эту тему.

1
Community 23 Май 2017 в 12:20

Я предполагаю, что вы используете WebApi (например, ваш ApiController равен System.Web.Http.ApiController)

Тогда ваш метод контроллера будет просто

public HttpResponseMessage GetCars([FromUri] string make, [FromUri] string model) {
    ... code ...
}
0
gaiazov 3 Мар 2015 в 21:34