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

Warum wollen Sie zurück, die eine base64-image, wenn es angefordert wird? Der Punkt, der base64-Daten-URIs einbetten, werden die Daten innerhalb der HTML. Für ein normales Bild zu Holen, sollten Sie wieder die binären Daten direkt.
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

Schreibe einen Kommentar