APIコントローラからjpegイメージを表すbase64文字列を返して、<img>
のsrcとして設定しようとしていますが、すべての試みが失敗しました。 。 data:image/jpeg;base64
が含まれ、私は、FlushAsync()
を削除ContentType
を定義する方法を変更するように、いくつかのことを試してみたASP.NET Core APIコントローラ:Response.Body.WriteAsync base64文字列が動作しない
[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();
}
}
:
<img src="/api/TestBase64Image" alt="image test" />
そして、私のコントローラ:ここ
は非常に単純なHTMLです文字列内にあるかどうかはわかりませんが、何も動作していません。私はhereとレスポンスボディストリームに書き込みをなんとかですhereを見てきましたので、私は、私は良い方法によ推測(私は前に、単純な文字列を返すようにしようとしたが、同様に作業していませんでした)。
はい私のbase64文字列も正しいです。私はHTMLに直接組み込み、画像が正しく表示されているためです。
正確には、JavaScriptやRazorビューを使用して純粋なHTMLとコントローラのみを使用したいとは限りません。
また、私はAPIコントローラの中にいるので注意してください。我々のような空のASP.NETコアプロジェクトのStartup
クラスにConfigure
方法で見ると、私は同じことを行うことはできません。
app.Run(async (context) =>
{
await context.Response.WriteAsync("Hello World!");
});
両方の応答のタイプはHttpResponse
、doesnの私のコントローラ内の一つであるにもかかわらず、 「tはあなたの助けのための任意のResponse.WriteAsync
しかしResponse.Body.WriteAsync
感謝を持って、それは私が探してる時間をされているが、これについてほとんどのリソースは、あなたがまだBASE64としてデータを返しているASP.NETコア
要求があったときにbase64イメージを返そうとしているのはなぜですか? base64データURIのポイントは、HTML内にデータを埋め込むことです。通常のイメージフェッチの場合は、バイナリデータを直接返す必要があります。 –
私は画像をbase64文字列として扱うことになっているため、物理ファイルを用意する必要はありません。しかし、私がやっていることではなく、 'Encoding.UTF8.GetBytes'を使ってバイナリデータを返していますか?古いASP.NET(非MVC)では 'Response.BinaryWrite'を使用していましたが、コアにはこのようなことはありませんので、私はこれを行う方法を失いました... –
あなたのコントローラコードの理由必要な拡張メソッドで名前空間を含めなかったため、 "Response.WriteAsync()"がありません。 ;)あなたのコントローラページに 'Using Microsoft.AspNetCore.Http;'を追加すると、そこに表示されます。ヒント:拡張メソッド名を入力すると、VSはクイックアクションプロンプトでそれを解決しようとします。 –