2016-08-27 5 views
12

Web API Getメソッドでイメージを返す必要があります。以下のコードは、このメッセージがFiddlerのImageViewウィンドウで「このレスポンスはエンコードされていますが、画像であると主張していません」というメッセージを受け取る以外は正常に動作しているようです。Web APIでイメージを返す方法を取得する

public HttpResponseMessage Get() 
{ 
    using (FileStream fs = new FileStream(filePath, FileMode.Open)) 
    { 
     HttpResponseMessage response = new HttpResponseMessage(); 
     response.Content = new StreamContent(fs); 
     response.Content.Headers.ContentType = new MediaTypeHeaderValue("image/jpeg"); 
     return response; 
    } 
} 

また、私はこのコードでフィドラーで同じ結果を参照してください。私は.PNG形式を使用している場合

public HttpResponseMessage Get() 
{ 
    HttpResponseMessage response = new HttpResponseMessage(); 
    Byte[] b = (GetImageByteArray()); 
    response.Content = new ByteArrayContent(b); 
    response.Content.LoadIntoBufferAsync(b.Length).Wait(); 
    response.Content.Headers.ContentType = new MediaTypeHeaderValue("image/jpeg"); 
    return response; 
} 

は、私は同じ結果を得ます。

+0

GetImageByteArray()メソッドの詳細を教えてください。また、あなたが読んでいるイメージがjpeg/jpgイメージで、他のフォーマットイメージではないと確信していますか? – dotnetstep

答えて

21

私が正しく理解していれば

あなたの助けに感謝

は、その後、あなたはasp.netコアに固有の求めています。 ASP.netのコアHttpResponseMessageは、ASP.netのWeb API 2で行ったように結果を返す方法ではありません。

asp.netコア(WEB API)では、このように見えます。

[HttpGet] 
public IActionResult Get() 
{    
    Byte[] b = System.IO.File.ReadAllBytes(@"E:\\Test.jpg"); // You can use your own method over here.   
    return File(b, "image/jpeg"); 
} 

注:あなたがフィドラーImageViewの中で、あなたがこのようなメッセージが表示されることを言及するように、「彼の応答がエンコードされていますが、画像であることを主張しません。」 ASP.netコアはHttpResponseMessageを単純なクラスとみなし、jsonまたはxmlに変換するためです。

+0

さて、最終的な結果は何ですか?あなたのコードはとてもうまくいきます。 HttpResponseMessageを使用しています。 :-)私はそれを正しい答えとしてマークします。ありがとう、 –

+3

ストリームを受け入れる 'File'メソッドのオーバーロードを使用する方が良いです。この方法で、ピクチャを送信する前にサーバのメモリにロードしないでください。 'FileStream stream = File.Open(@" E:\\ Test.jpg ");返信ファイル(ストリーム、 "image/jpeg");またはさらに簡単に:返信PhysicalFile( "@ E:\\ Test.jpg"、 "image/jpg"); 'https://github.com/aspnet/ Mvc/blob/dev/src/Microsoft.AspNetCore.Mvc.Core/ControllerBase.cs#L711 – Tseng

関連する問題