Warum wird meine Datei nicht zurückgegeben werden, durch eine GET-Anfrage von meiner Web-API-Funktion?
Habe ich eine Funktion zugänglich durch meine REST-API, konfiguriert mit ASP.NET Web API 2.1, das sollte wieder ein Bild für die Anrufer. Für Testzwecke, ich habe nur seine Rückkehr ein Beispiel-Bild habe ich gespeichert auf meinem lokalen Rechner jetzt. Hier ist die Methode:
public IHttpActionResult GetImage()
{
FileStream fileStream = new FileStream("C:/img/hello.jpg", FileMode.Open);
HttpContent content = new StreamContent(fileStream);
content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("image/jpeg");
content.Headers.ContentLength = fileStream.Length;
return Ok(content);
}
Wenn diese Methode aufgerufen wird, bin ich nicht immer ein Bild zurück an alle. Hier ist die Antwort, die ich erhalte:
{"Headers":[{"Key":"Content-Type","Value":["image/jpeg"]},{"Key":"Content-Length","Value":["30399"]}]}
Warum bekomme ich nicht die image-Daten als Teil der Anforderung? Wie kann das gelöst werden?
InformationsquelleAutor Jim | 2014-05-20
Du musst angemeldet sein, um einen Kommentar abzugeben.
Eine Möglichkeit ist das schreiben einer benutzerdefinierten
IHttpActionResult
um Ihre Bilder:die Sie verwenden, in Ihrem Web-API-controller-action:
Ist
Task.Run
notwendig? NichtTask.FromResult
genug sein?Während Der Aufgabe.FromResult funktionieren würde, glaube ich, die Aufgabe.Ausführung könnte etwas mehr nützlich in diesem Fall, da es erlauben würde, die Datei zu Lesen, die in einem separaten Task. Aufgabe.Führen Sie akzeptiert auch die cancellationToken, so dass möglicherweise gibt es einige nutzen es auch.
Wenn der code ist schnell (calling ein paar von Konstruktoren ist), verlieren Sie mehr CPU-Zeit auf die Infrastruktur als durch die Befreiung thread mal.
InformationsquelleAutor Darin Dimitrov
Zugabe zu dem, was @Darin erwähnt, die
Ok<T>(T content)
Helfer, die Sie verwenden, tatsächlich gibt eineOkNegotiatedContentResult<T>
, die, wie der name sagt, läuft die content-negotiation. Da Sie nicht möchten, dass content-negotiation in diesem Fall müssen Sie eine benutzerdefinierte Aktion erstellen Ergebnis.Folgende ist ein Beispiel, wie Sie das tun können:
http://aspnet.codeplex.com/SourceControl/latest#Samples/WebApi/ActionResults/ActionResults/Results/OkFileDownloadResult.cs
InformationsquelleAutor Kiran Challa
Können Sie laden Sie Ihre Datei, indem Sie folgenden code:
InformationsquelleAutor Chandrika Prajapati
Benutzen Sie folgenden code für den download der Datei von der web-api :
InformationsquelleAutor Chandrika Prajapati