Używam Web API .Net MVC4 do (miejmy nadzieję) zaimplementować RESTful api. Muszę przekazać kilka parametrów do systemu i zlecić mu wykonanie jakiejś czynności, a następnie zwrócić listę obiektów jako wyniki. Dokładniej mówiąc, podaję dwie daty i zwracam rekordy, które mieszczą się między nimi. Śledzę również zwracane rekordy, aby kolejne wywołania nie były ponownie przetwarzane w systemie.
Rozważyłem kilka podejść:
Serializowanie parametrów w jeden ciąg JSON i wybieranie ich w interfejsie API. http://forums.asp.net/t/1807316.aspx/1
Przekaż parametry w ciągu zapytania.
Jaki jest najlepszy sposób przekazania wielu parametrów zapytania do spokojnego interfejsu API?Definiowanie parametrów w trasie: api / controller / date1 / date2
Użycie POST, który z natury pozwala mi przekazać obiekt z parametrami.
Badanie ODATA, ponieważ obsługuje je Web API (obecnie). Nie zrobiłem jeszcze wiele z tym, więc nie jestem z tym zaznajomiony.
Wygląda na to, że właściwe praktyki REST wskazują, kiedy pobierane są dane, należy użyć GET. Jednak GET powinien również być nieulotny (nie wywołuje skutków ubocznych) i zastanawiam się, czy moja konkretna implementacja to narusza, skoro zaznaczam rekordy w systemie API, stąd generuję efekty uboczne.
Doprowadziło mnie to również do pytania o obsługę zmiennych parametrów. Jeśli lista parametrów wejściowych ulegnie zmianie, ponowne zdefiniowanie trasy dla Wyboru 3 byłoby żmudne, gdyby zdarzało się to często. A co by się stało, gdyby parametry zostały zdefiniowane w czasie wykonywania ...
W każdym razie, w przypadku mojej konkretnej realizacji, który wybór (jeśli w ogóle) wydaje się najlepszy?
Myślę, że najłatwiej jest po prostu użyć
AttributeRouting
.Jest to oczywiste w twoim kontrolerze, dlaczego chcesz to mieć w
WebApiConfig
pliku globalnym ?Przykład:
Te
{}
nazwy muszą dopasować parametry.To proste, teraz masz oddzielny,
GET
który obsługuje wiele parametrów w tym przypadku.źródło
WebApiConfig
pliku, ale jest to rzeczywiście ładniejsze.Route
parametrów nazwanych (np. Parametrów zapytania)?Po prostu dodaj nową trasę do
WebApiConfig
wpisów.Na przykład, aby zadzwonić:
Dodaj:
Następnie dodaj parametry do wywołania HTTP:
źródło
api/controller?start=date1&end=date2
identyfikatora URI stylu.Po prostu musiałem zaimplementować RESTfull API, w którym muszę przekazać parametry. Zrobiłem to, przekazując parametry w ciągu zapytania w tym samym stylu, co opisano w pierwszym przykładzie Marka „api / controller? Start = date1 & end = date2”
W kontrolerze użyłem wskazówki z podziału adresu URL w C #?
W moim przypadku dzwoniłem do WebApi przez Ajax, wyglądając tak:
Mam nadzieję, że to pomoże...
źródło
Znalazłem doskonałe rozwiązanie na http://habrahabr.ru/post/164945/
źródło
Get
), czy nadal możesz jej używać[FromUri]
? Nie wydaje mi się, żeby to działało.Używanie GET lub POST jest jasno wyjaśnione przez @LukLed . Jeśli chodzi o sposoby przekazywania parametrów, sugerowałbym skorzystanie z drugiego podejścia (też nie wiem zbyt wiele o ODATA ).
To nie jest przyjazne dla użytkownika i przyjazne dla SEO
Jest to zwykle preferowane podejście.
To zdecydowanie nie jest dobre podejście. To sprawia, że ktoś
date2
jest zasobem podrzędnym,date1
a tak nie jest. Oba parametry zapytaniadate1
idate2
są parametrami zapytania i znajdują się na tym samym poziomie.W prostym przypadku zasugerowałbym taki URI,
Ale osobiście podoba mi się poniższy wzorzec URI, ale w tym przypadku musimy napisać niestandardowy kod, aby zmapować parametry.
źródło
Użyj powiązania parametrów zgodnie z pełnym opisem tutaj: http://www.asp.net/web-api/overview/formats-and-model-binding/parameter-binding-in-aspnet-web-api
źródło
Oba parametry linku głównego ({jeden}, {dwa}) i parametry funkcji Get (jeden, dwa) powinny być takie same
źródło
Wiem, że to jest naprawdę stare, ale ostatnio chciałem tego samego i oto co znalazłem ...
Więc teraz w twoim adresie / URI / ...
http (s): // myURL / api / myController /? var = getnew & test = test
Wynik: „Znaleziono test”
http (s): // myURL / api / myController /? var = getnew & test = cokolwiek
Wynik: „Nie udało się znaleźć tego testu”
źródło
Teraz możesz to zrobić, używając po prostu
to zwróci: „wartość: 5 10”
jeśli zadzwonisz za pomocą https: // twoja_domena / api / yourcontroller? id = 5 & abc = 10
źródło
źródło