我有两个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用于我的客户端。
那么我怎样才能收到图像而不是数据类型呢?
感谢您的帮助
答案 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}}。