ASP.NET Kern-API-Controller: Response.Körper.WriteAsync base64-string funktioniert nicht
Ich versuche zurück, die eine base64-Zeichenfolge, die ein jpeg-Bild von einer API-Steuerung und legen Sie es als src eines <img>
aber alle meine versuche fehlgeschlagen.
Hier ist die sehr einfache HTML:
<img src="/api/TestBase64Image" alt="image test" />
Und mein controller:
[Route("api/[controller]")]
public class TestBase64ImageController : Controller
{
private const string _base64Image = "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEBLAEsAAD/7Sfg.....";
private const string _base64Image2 = "/9j/4AAQSkZJRgABAQEBLAEsAAD/7Sfg.....
[HttpGet]
public async Task Get()
{
Response.ContentType = "image/jpeg";
//Response.ContentType = "text/plain";
//Response.ContentType = new MediaTypeHeaderValue("image/jpeg").ToString();
//Response.ContentType = new MediaTypeHeaderValue("text/plain").ToString();
//Response.Headers.Add("Content-Length", _base64Image.Length.ToString());
//HttpContext.Response.ContentLength = _base64Image.Length;
await Response.Body.WriteAsync(Encoding.UTF8.GetBytes(_base64Image), 0, _base64Image.Length);
//await Response.Body.FlushAsync();
}
}
Habe ich versucht, einige Dinge, wie die Beseitigung FlushAsync()
, änderung der Art und Weise zu definieren, die ContentType
gehören data:image/jpeg;base64
im string oder nicht, aber nichts funktioniert.
Ich habe gesehen, hier und hier, dass das schreiben in der Antwort der Körper-stream machbar ist, also ich nehme an ich bin auf dem guten Weg (ich habe versucht, um wieder eine einfache Zeichenfolge vor, aber nicht so gut funktioniert).
Ja meine base64-Zeichenfolge korrekt ist, denn ich habe auch versucht, Sie direkt in den HTML-Code und das Bild erscheint richtig.
Ich präzise ich will nicht von JavaScript oder Razor-Ansicht zu erreichen, ist nur reines HTML und meinem controller.
Bitte auch beachten, dass ich bin innerhalb einer API-Controller. Ich kann das nicht tun das gleiche wie wir sehen, in der Configure
Methode in der Startup
Klasse eines leeren ASP.NET Core-Projekt wie:
app.Run(async (context) =>
{
await context.Response.WriteAsync("Hello World!");
});
Obwohl beide Antworten' - Typen sind HttpResponse
, die in meinem controller keine Response.WriteAsync
aber Response.Body.WriteAsync
Danke für Eure Hilfe, es waren Stunden, die ich bin auf der Suche, aber es gibt fast keine Ressourcen, die über diese noch für ASP.NET Kern
Ich bin in einem Kontext, der mit dem Bild als base64-string, ich habe keine physischen Datei zu dienen. Aber ist es nicht das, was ich Tue, Rückkehr binäre Daten mithilfe
Encoding.UTF8.GetBytes
? Bin ich verloren, der Weg, dies zu tun, weil in alten ASP.NET (nicht-MVC -) ich hab das mit Response.BinaryWrite
aber es gibt keine solche Sache im Kern...Für den Datensatz, der Grund Ihrer controller-code nicht " - Antwort.WriteAsync()" ist, dass Sie NICHT auch den namespace mit der erforderlichen Erweiterung-Methode. 😉 Add
using Microsoft.AspNetCore.Http;
zu Ihrem controller-Seite und es wird da sein. TIPP: Wenn du die extension-Methode name, VS werden versuchen, es für Sie zu lösen mit der schnellen Aktion.Ich hatte ein ähnliches problem und der Lösung gearbeitet! Fügen Sie das Paket von "NuGet-Pakete Verwalten" und dann installieren: Microsoft.AspNetCore.Http.Abstraktionen "version = 1.1.2" (in meinem Fall). Endlich in den source-code, fügte ich hinzu: mit Microsoft.AspNetCore.Http; Danke für die Hilfe!
InformationsquelleAutor Jérôme MEVEL | 2016-10-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
Du bist immer noch die Rückgabe der Daten als base64-text, im Grunde - Sie sind immer die UTF-8-codierte form von es, aber das ist alles.
Wenn Sie wirklich nur noch das base64-version des Bildes, die Sie gerade brauchen, um zu decodieren,:
(Anmerkung: es muss nur der base64 konvertieren - nicht die Daten-URI.)
WriteAsync
wartet auch dieoffset
und dielength
lasse ich Sie Bearbeiten Ihre Antwort...)Getan, danke.
InformationsquelleAutor Jon Skeet