Ich verwende die .NET MVC4-Web-API, um (hoffentlich) eine RESTful-API zu implementieren. Ich muss ein paar Parameter an das System übergeben und es eine Aktion ausführen lassen, um dann eine Liste von Objekten als Ergebnis zurückzugeben. Insbesondere übergebe ich zwei Daten und gebe Aufzeichnungen zurück, die zwischen ihnen liegen. Ich verfolge auch die zurückgegebenen Datensätze, damit nachfolgende Anrufe im System nicht erneut verarbeitet werden.
Ich habe einige Ansätze in Betracht gezogen:
Serialisieren der Parameter in eine einzelne JSON-Zeichenfolge und Auswählen in der API. http://forums.asp.net/t/1807316.aspx/1
Übergeben Sie die Parameter in der Abfragezeichenfolge.
Was ist der beste Weg, um mehrere Abfrageparameter an eine erholsame API zu übergeben?Definieren der Parameter in der Route: api / controller / date1 / date2
Verwenden eines POST, mit dem ich von Natur aus ein Objekt mit Parametern übergeben kann.
Erforschung von ODATA, da die Web-API dies (derzeit) unterstützt. Ich habe noch nicht viel damit gemacht, daher bin ich damit nicht sehr vertraut.
Es scheint, dass die richtigen REST-Praktiken anzeigen, wenn Daten abgerufen werden, sollten Sie ein GET verwenden. GET sollte jedoch auch nullipotent sein (erzeugt keine Nebenwirkungen), und ich frage mich, ob meine spezifische Implementierung dies verletzt, da ich Datensätze im API-System markiere und daher Nebenwirkungen hervorrufe.
Es führte mich auch zur Frage der Unterstützung variabler Parameter. Wenn sich die Eingabeparameterliste ändert, wäre es mühsam, Ihre Route für Auswahl 3 neu zu definieren, wenn dies häufig vorkommt. Und was kann passieren, wenn die Parameter zur Laufzeit definiert werden ...
Welche Auswahl (falls vorhanden) scheint für meine spezifische Implementierung auf jeden Fall am besten zu sein?
Ich denke, der einfachste Weg ist, einfach zu benutzen
AttributeRouting
.In Ihrem Controller ist klar, warum Sie dies in Ihrer globalen
WebApiConfig
Datei wünschen .Beispiel:
Die
{}
Namen müssen Ihren Parametern entsprechen.So einfach ist das. Jetzt haben Sie eine separate
GET
Datei, die in dieser Instanz mehrere Parameter verarbeitet.quelle
WebApiConfig
Datei einzurichten , aber das ist in der Tat schöner.Route
für benannte Parameter festzulegen (z. B. Abfrageparameter)?Fügen Sie einfach eine neue Route zu den
WebApiConfig
Einträgen hinzu.Zum Beispiel, um anzurufen:
hinzufügen:
Fügen Sie dann die Parameter zum HTTP-Aufruf hinzu:
quelle
api/controller?start=date1&end=date2
Stil-URI verwendet.Ich musste nur eine RESTfull-API implementieren, in der ich Parameter übergeben muss. Dazu habe ich die Parameter in der Abfragezeichenfolge im gleichen Stil übergeben, wie er in Marks erstem Beispiel "api / controller? Start = date1 & end = date2" beschrieben wurde.
Im Controller habe ich einen Tipp von URL verwendet, der in C # aufgeteilt ist.
In meinem Fall rief ich das WebApi über Ajax an und sah aus wie folgt:
Ich hoffe das hilft...
quelle
Ich habe auf http://habrahabr.ru/post/164945/ eine hervorragende Lösung gefunden.
quelle
Get
) aufrufen , können Sie diese trotzdem verwenden[FromUri]
? Ich kann das scheinbar nicht zum Laufen bringen.Die Verwendung von GET oder POST wird durch @LukLed klar erklärt . In Bezug auf die Art und Weise, wie Sie die Parameter übergeben können, würde ich vorschlagen, den zweiten Ansatz zu wählen (ich weiß auch nicht viel über ODATA ).
Dies ist nicht benutzerfreundlich und SEO-freundlich
Dies ist der übliche bevorzugte Ansatz.
Dies ist definitiv kein guter Ansatz. Dies gibt dem Gefühl, dass jemand
date2
eine Unterressource von ist,date1
und das ist nicht der Fall. Sowohl diedate1
als auchdate2
sind Abfrageparameter und befinden sich auf derselben Ebene.Im einfachen Fall würde ich eine URI wie diese vorschlagen,
Ich persönlich mag das folgende URI-Muster, aber in diesem Fall müssen wir einen benutzerdefinierten Code schreiben, um die Parameter abzubilden.
quelle
Verwenden Sie die Parameterbindung wie hier vollständig beschrieben: http://www.asp.net/web-api/overview/formats-and-model-binding/parameter-binding-in-aspnet-web-api
quelle
Beide Parameter des Root-Links ({eins}, {zwei}) und der Get-Funktionsparameter (eins, zwei) sollten identisch sein
quelle
Ich weiß, dass dies wirklich alt ist, aber ich wollte das Gleiche in letzter Zeit und hier ist, was ich gefunden habe ...
Also jetzt in deiner Adresse / URI / ...
http (s): // myURL / api / myController /? var = getnew & test = test
Ergebnis: "Gefundener Test"
http (s): // myURL / api / myController /? var = getnew & test = irgendetwas
Ergebnis: "Dieser Test konnte nicht gefunden werden"
quelle
Jetzt können Sie dies einfach mit verwenden
Dies gibt Folgendes zurück: "Wert: 5 10"
Wenn Sie es mit https: // yourdomain / api / yourcontroller aufrufen? id = 5 & abc = 10
quelle
quelle