C# webapi HttpResponseMessage文件下载,在一般处理程序调用做中转,然后页面下载,可使用下面这种方式。
using (HttpClient client = new HttpClient())
{
HttpResponseMessage res = client.PostAsJsonAsync("http://XX.XX.XX.XX:XXXX/api/XXXXX/ExportXXXReport", shc).Result;
context.Response.Clear();
context.Response.Charset = "UTF-8";
context.Response.ContentEncoding = System.Text.Encoding.UTF8;
context.Response.AddHeader("Content-Type", "application/octet-stream");
// 添加头信息,为"文件下载/另存为"对话框指定默认文件名,设定编码为UTF8,防止中文文件名出现乱码
context.Response.AddHeader("Content-Disposition", "attachment; filename=" + System.Web.HttpUtility.UrlEncode(res.Content.Headers.ContentDisposition.FileName, System.Text.Encoding.UTF8));
// 添加头信息,指定文件大小,让浏览器能够显示下载进度
context.Response.AddHeader("Content-Length", res.Content.Headers.ContentLength.ToString());
//指定返回的是一个不能被客户端读取的流,必须被下载
context.Response.ContentType = "application/vnd.ms-excel";
// 把文件流发送到客户端
context.Response.BinaryWrite(res.Content.ReadAsByteArrayAsync().Result);
// 停止页面的执行
context.Response.End();
}