使用FileContentResult返回文件并将其写入文件

时间:2013-12-03 18:14:37

标签: c# asp.net-mvc-4 asmx

现在,我有一个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;
}

1 个答案:

答案 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);
祝你好运!

相关问题