现在,我有一个Web服务(.asmx)调用mvc 4控制器操作,通过以下方式返回PDF文件:
return File(pdfBytes, "application/pdf", "Report.pdf");
我在Web服务中得到的结果如下:
WebResponse response = request.GetResponse();
var status = ((HttpWebResponse)response).StatusDescription;
var dataStream = response.GetResponseStream();
StreamReader reader = new StreamReader(dataStream);
string responseFromServer = reader.ReadToEnd();
我想要的是将返回的文件写入文件系统。像这样:
byte[] responseBytes = Encoding.UTF8.GetBytes(responseFromServer);
var file = File.Create("C://Report.pdf");
file.Write(responseBytes, 0, responseBytes.Length);
但是所写的文件将所有页面都空白。
我在这里缺少什么?
解决方案是从响应流中直接获取字符 。
像这样:
var dataStream = response.GetResponseStream() ;
byte[] responseBytes;
using (var memoryStream = new MemoryStream())
{
dataStream.CopyTo(memoryStream);
responseBytes = memoryStream.ToArray();
return responseBytes;
}
答案 0 :(得分:2)
请勿使用WebResponse
对象。请改用WebClient
。它非常适合在http
上下载二进制数据。您需要做的就是用以下内容替换您的webservice代码:
var serverUrl = "http://localhost:60176/Demo/PdfFile"; //... replace with the request url
var client = new System.Net.WebClient();
var responseBytes = client.DownloadData(serverUrl);
System.IO.File.WriteAllBytes(@"c:\Report.pdf", responseBytes);
祝你好运!