Я использую .Net MVC4 Web API для (надеюсь) реализации API RESTful. Мне нужно передать несколько параметров в систему и заставить ее выполнить какое-то действие, а затем вернуть список объектов в качестве результатов. В частности, я передаю две даты и возвращаю записи, которые попадают между ними. Я также отслеживаю возвращенные записи, чтобы последующие вызовы не обрабатывались в системе повторно.
Я рассмотрел несколько подходов:
Сериализация параметров в одну строку JSON и выделение их в API. http://forums.asp.net/t/1807316.aspx/1
Передайте параметры в строке запроса.
Каков наилучший способ передать несколько параметров запроса в успокоительный API?Определение параметров в маршруте: api / controller / date1 / date2
Использование POST, которое по своей сути позволяет мне передавать объект с параметрами.
Исследование ODATA, поскольку веб-API (в настоящее время) поддерживает его. Я еще ничего не сделал с этим, поэтому я не очень знаком с этим.
Кажется, что правильные методы REST указывают, когда данные извлекаются, вы должны использовать GET. Однако GET также должен быть нулевым (не вызывает побочных эффектов), и мне интересно, нарушает ли это моя конкретная реализация, поскольку я отмечаю записи в системе API, следовательно, я создаю побочные эффекты.
Это также привело меня к вопросу о поддержке переменных параметров. Если список входных параметров изменится, было бы утомительно пересматривать ваш маршрут для Варианта 3, если это часто случается. И что может произойти, если параметры определены во время выполнения ...
В любом случае, для моей конкретной реализации, какой выбор (если есть) кажется лучшим?
Я думаю, что самый простой способ - это просто использовать
AttributeRouting
.В вашем контроллере очевидно, зачем вам это в вашем глобальном
WebApiConfig
файле?Пример:
В
{}
имена должны соответствовать вашим параметрам.Просто, теперь у вас есть отдельное устройство,
GET
которое обрабатывает несколько параметров в этом случае.источник
WebApiConfig
файле, но это действительно лучше.Route
для именованных параметров (например, параметров запроса)?Просто добавьте новый маршрут к
WebApiConfig
записям.Например, позвонить:
Добавить:
Затем добавьте параметры в вызов HTTP:
источник
api/controller?start=date1&end=date2
стиль URI.Мне просто нужно было реализовать API RESTfull, где мне нужно передать параметры. Я сделал это, передав параметры в строке запроса в том же стиле, который описан в первом примере Марка «api / controller? Start = date1 & end = date2»
В контроллере я использовал подсказку от URL раскола в C #?
В моем случае я звонил в WebApi через Ajax в виде:
Надеюсь, это поможет...
источник
Я нашел отличное решение на http://habrahabr.ru/post/164945/
источник
Get
), вы все еще можете его использовать[FromUri]
? Я не могу заставить это работать.Использование GET или POST четко объясняется @LukLed . Что касается способов передачи параметров, я бы предложил использовать второй подход (я тоже не очень разбираюсь в ODATA ).
Это не удобно для пользователя и SEO
Это обычный предпочтительный подход.
Это определенно не очень хороший подход. Это заставляет чувствовать, что кто-то
date2
является субресурсом,date1
а это не так. Оба параметра являются параметрами запросаdate1
иdate2
находятся на одном уровне.В простом случае я хотел бы предложить такой URI,
Но мне лично нравится приведенный ниже шаблон URI, но в этом случае мы должны написать собственный код для сопоставления параметров.
источник
Используйте привязку параметров, как описано полностью здесь: http://www.asp.net/web-api/overview/formats-and-model-binding/parameter-binding-in-aspnet-web-api
источник
Оба параметра корневой ссылки ({one}, {two}) и параметров функции Get (один, два) должны быть одинаковыми
источник
Я знаю, что это действительно старый, но я недавно хотел то же самое, и вот что я нашел ...
Так что теперь в ваш адрес / URI / ...
HTTP (s): // myURL / API / myController / вар = getnew & тест = тест
Результат: «Найден тест»
HTTP (s): // myURL / API / myController / вар = getnew & тест = ничего
Результат: «Не удалось найти этот тест»
источник
Теперь вы можете сделать это, просто используя
это вернет: "значение: 5 10"
если вы звоните с помощью https: // yourdomain / api / yourcontroller? id = 5 & abc = 10
источник
источник