如何使用异步方法将C#中的图像发送到客户端

时间:2017-09-15 14:58:35

标签: c# asynchronous highcharts bitmap

我有两个C#应用程序。一个是服务,另一个是客户。我的服务使用HighCharts.NET创建一个图表。然后我将图表发送到外部服务器并将图表作为图像。这个方法需要是异步的,因为我必须等待,直到我成为服务器的图像。嗯,这很好。 这是代码:

    public async Task CreateChart(HttpMessage message)
    {
        var settings = new HighchartsSetting
        {
            ExportImageType = "png",
            ImageWidth = 1500,
            ServerAddress = "http://export.highcharts.com/"
        };

        var client = new HighchartsClient(settings);

        if (message.Message == "Request was successfully")
        {
            // Get Chart Data
            var results = getResults();

            var chartOptions = new
            {
                title = new
                {
                  text = "TestChart"  
                },
                xAxis = new
                {
                    categories =  getDates();
                },
                series = new[]
                {
                    new { data = getData() }
                }
            };

            var link = await client.GetChartImageFromOptionsAsync(JsonConvert.SerializeObject(chartOptions));

            string preLink = System.Text.Encoding.UTF8.GetString(link);

            string highChartsLink = "http://export.highcharts.com/" + preLink;

            byte[] file;
            using (var downloadClient = new WebClient())
            {
                file = downloadClient.DownloadData(highChartsLink);
            }
            _chartFile = file;
        }

如您所见,现在我的Image在_chartFile变量中采用byte []格式。

现在我有我的控制器:

  public async Task<Image> GetRequest([FromBody]ChartRequestModel body)
    {
        ....
        // Creates Chart based on request
        await highChart.CreateChart(message);

        byte[] file = highChart.getChartFile();
        using (Image image = Image.FromStream(new MemoryStream(file)))
        {
            return image;
        }
    }

所以现在我将图像格式的图像返回给我的控制器。

我的客户端收到来自控制器的内容。这是代码(这是另一个应用程序):

   IRestResponse response = client.Execute(requestCom);

所以现在我的问题是,客户收到: response.content = System.Drawing.Bitmap 但我希望它能够接收位图图像,而不仅仅是它的类型。 我将RestSharp用于我的客户端。

那么我怎样才能收到图像而不是数据类型呢?

感谢您的帮助

2 个答案:

答案 0 :(得分:1)

您是否尝试过base64编码字节并将其作为参数发送到响应中?

答案 1 :(得分:1)

我会在Controller上使用File方法并返回ActionResult

public async Task<ActionResult> GetRequest([FromBody]ChartRequestModel body)
{
    ....
    // Creates Chart based on request
    await highChart.CreateChart(message);

    byte[] file = highChart.getChartFile();
    return File(file, "image/png"); //or image/jpg, etc.
}

现在您返回的对象不是ActionResult,默认情况下ASP.NET MVC会返回ToString()以外的任何内容{/ 1}}。