Wie, um eine Liste der Objekte als IHttpActionResult?
Ich bin neu ASP.NET webapi und ich kann nicht einen Weg finden, um eine Liste der Objekte abgefragt, die von id.
Dies ist mein controller-Methode für die GET-Anforderung.
Ich möchte wieder all die Fragen, die angegeben questionnaireId per url übergeben.
Habe ich versucht, dieses:
//GET: api/Questions/5
[ResponseType(typeof(List<Question>))]
public Task<IHttpActionResult> GetQuestion(int questionnaireId)
{
var questions = from q in db.Questions
where q.QuestionnaireId == questionnaireId
select new Question()
{
Id = q.Id,
ImageLink = q.ImageLink,
QuestionnaireId = q.QuestionnaireId,
Text = q.Text
};
return questions;
}
Dies ist meine Frage-Klasse:
public class Question
{
public int Id { get; set; }
[ForeignKey("Questionnaire")]
public int QuestionnaireId { get; set; }
public string Text { get; set; }
public string ImageLink { get; set; }
public virtual Questionnaire Questionnaire { get; set; }
}
Aber auf return questions
es zeigt die compiler-Fehlermeldung:
Kann nicht implizit konvertiert Art
System.Linq.IQueryable<finah_backend.Models.Question>
zuSystem.Web.Http.IHttpActionResult
. Eine explizite Konvertierung vorhanden ist (fehlt ein cast?)
Möchte ich, um eine Liste von Fragen, die zurückgegeben JSON abgefragt auf questionnaireId, die übergeben wird, die über eine url-also api/Fragen/2 ==> gibt mir wieder all die Fragen, die mit questionnaireId = 2.
- Was ist errror oder bist du eine Ausnahme? Ich denke, deine Methode
GetQuestion
würde nicht kompilieren, wegen der nicht übereinstimmenden zurück geben mit dem, was Sie wieder tatsächlich. - Kann nicht implizit konvertiert Typ 'System.Linq -.IQueryable<finah_backend.Modelle.Frage>' zu 'System.Web.Http.IHttpActionResult'. Eine explizite Konvertierung vorhanden ist (fehlt ein cast?)
Du musst angemeldet sein, um einen Kommentar abzugeben.
Bist du mit dem
[ResponseType]
Attribut, aber das ist nur für die Generierung von Dokumentation finden Sie unter MSDN: ResponseTypeAttribute Klasse:Können Sie entweder ändern Sie Ihr zurück geben (und das Attribut entfernen, als es erfordert nicht mehr, als der Rückgabetyp der Dokumentation wird erzeugt von den tatsächlichen Unterschrift):
Oder, wenn Sie wollen, dass es async:
Oder wickeln, das Ergebnis in einem
IHttpActionResult
, die die MethodeRequest.CreateResponse<T>()
hat:Letzteres erfolgt für Sie, wenn Sie rufen Sie die
ApiController.Ok()
Methode:public Task<IEnumerable<Question>> GetQuestion(int questionnaireId)
aber ich bekomme immer noch die Fehlermeldung:Cannot implicitly convert type System.Linq.IQueryable<finah_backend.Models.Question> to 'System.Web.Http.IHttpActionResult'. An explicit conversion exists (are you missing a cast?)
public IEnumerable<>
oderpublic async Task<IEnumerable<>>
.Nur einfach zurück, wie diese, die Sie verwenden müssen, das ist eine nette Methoden, die ApiController jetzt versorgt.
Wird das Ergebnis einen status-code-200, zusammen mit Ihren Fragen collection.
System.Web.Http.Results.OkResult
zuSystem.Threading.Tasks.Task<System.Web.Http.IHttpActionResult>
". OP fehlt derasync
modifier.async
deine Antwort.Zunächst nicht nutzen, die juristische Person, die direkt für die Bereitstellung von Daten.
Erstellen Sie ein DTO für Ihr Unternehmen:
Dann Ihre GET-Methode könnte wie folgt Aussehen:
Ich auch empfehlen die Verwendung von JSON für den Datentransfer, da es ziemlich einfach zu verwenden mit Javascript.
Ich denke, Sie sind auf der Suche nach einigen ähnlichen code wie unten: