5

クライアント側で既にロードされているドキュメントからJavaScriptを使用してサーバー「WebApi」にリクエストを送信しています。

サーバーはリクエストを受信すると、その場でビットマップを作成し、それを.pngとしてクライアントに返します。

クライアント側で応答を読み取ると、.ajaxリクエストのデータ部分から返されるのは空の文字列だけです。

WebApiを使用してサーバーから要求された画像を読み取り、サーバーから受信した新しい画像を使用してクライアント側で画像のsrc属性を設定するにはどうすればよいですか?

--WebApi

public HttpResponseMessage Get(int id)
    {
        ElevationResponse elev = ElevationHelper.GetElevation(id);

        Bitmap canvas = ShopDrawing.Elevation.Elevation.GetShopDrawing(elev, true);

        var ms = new MemoryStream();
        canvas.Save(ms, System.Drawing.Imaging.ImageFormat.Png);

        HttpResponseMessage r = Request.CreateResponse();
        r.Content = new StreamContent(ms);
        r.Content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("image/png");
        return r;
    }

- クライアント

  $.ajax(
         {
             async: true,
             url: '/api/drawings?id=' + this.id,
             type: 'GET',
             contentType: "application/json",
             success: function (d, status) {
                 debugger

             }
         });
4

1 に答える 1

8

'/api/drawings?id=' + this.id画像src属性として指定するだけです。

canvas.Save()サーバー側では、最初から送信されるように、後でメモリストリームをリセットする必要があります。Content-Lengthまた、ブラウザがダウンロード中に合計サイズを認識できるように、httpヘッダーを指定します。

ms.Position = 0;
r.Content.Headers.ContentLength = ms.Length;

これが機能しない場合は、ブラウザにURLを直接入力し、開発者ツールがネットワークトラフィックを表示できるようにします。

于 2013-02-08T11:38:48.143 に答える