Wie gebe ich eine Liste von Objekten als IHttpActionResult zurück?

8

Ich bin neu in ASP.NET Webapi und ich kann keinen Weg finden, um eine Liste von Objekten zurückzugeben, die durch ID abgefragt werden.

Dies ist meine Controller-Methode für die GET-Anfrage. Ich möchte alle Fragen zurückgeben, die einen bestimmten FragebogenId über URL übergeben haben.

Ich habe es versucht:

%Vor%

Das ist meine Fragenklasse:

%Vor%

Aber auf return questions wird der Compilerfehler angezeigt:

  

Der Typ System.Linq.IQueryable<finah_backend.Models.Question> kann nicht implizit in System.Web.Http.IHttpActionResult konvertiert werden. Es gibt eine explizite Konvertierung (fehlt eine Besetzung?)

Ich möchte eine Liste von Fragen erhalten, die in JSON zurückgesendet werden, das auf der per FragebogenId abgefragt wurde, die über eine URL weitergegeben wird, d.h. api / questions / 2 == & gt; gibt mir alle Fragen mit fragebogenId = 2 zurück.

    
Rick 20.03.2015, 09:59
quelle

4 Antworten

11

Sie verwenden das [ResponseType] -Attribut, aber das dient nur zum Generieren von Dokumentation, siehe MSDN: ResponseTypeAttribute-Klasse :

  

Verwenden Sie dies, um den Entitätstyp anzugeben, der von einer Aktion zurückgegeben wird, wenn der deklarierte Rückgabetyp HttpResponseMessage oder IHttpActionResult ist. Der ResponseType wird von ApiExplorer beim Generieren von ApiDescription gelesen.

Sie können entweder den Rückgabetyp ändern (und das Attribut entfernen, da es nicht mehr benötigt wird, da die Rückgabedokumentation aus der tatsächlichen Signatur generiert wird):

%Vor%

Oder wenn Sie möchten, dass es asynchron ist:

%Vor%

Oder wickeln Sie das Ergebnis in ein IHttpActionResult , was die Methode Request.CreateResponse<T>() tut:

%Vor%

Letzteres ist für Sie erledigt, wenn Sie die Methode ApiController.Ok() aufrufen:

%Vor%     
CodeCaster 20.03.2015, 10:49
quelle
6

Gib es einfach so zurück, dass du eine der schönen Methoden verwenden musst, die ApiController jetzt liefert.

Dies wird zusammen mit Ihrer Fragensammlung einen Statuscode von 200 zurückgeben.

%Vor%     
BenjaminPaul 20.03.2015 11:12
quelle
1

Verwenden Sie die Entität zunächst nicht direkt zum Bereitstellen von Daten. Erstellen Sie ein DTO für Ihre Entitäten:

%Vor%

Dann könnte Ihre GET-Methode so aussehen:

%Vor%

Ich empfehle auch, JSON für die Datenübertragung zu verwenden, da es ziemlich einfach ist, mit Javascript zu verwenden.

    
Jazjef 20.03.2015 10:42
quelle
0

Ich denke, dass Sie nach einem ähnlichen Code wie folgt suchen:

%Vor%     
webcodervk 20.03.2015 10:39
quelle

Tags und Links