使用GET请求在2个API上下载PDF

时间:2017-09-08 16:41:56

标签: c# asp.net-web-api

我试图通过GET请求下载跨越两个API的PDF文件。

如果直接使用API​​2,PDF下载代码可以正常下载:

Stream fileStream = File.Open(fileLocation, FileMode.Open);
result.Content = new StreamContent(fileStream);
result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/pdf");
result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment")
{
FileName = "test.pdf"
}; 
return result;

然而,当我把API1扔进混合物时,事情变得有些不可思议!!

using (System.Net.Http.HttpClient client = new System.Net.Http.HttpClient())
{
var httpRequestMessage = new HttpRequestMessage();
httpRequestMessage.Method = HttpMethod.Get;
httpRequestMessage.RequestUri = new Uri(requestUrl);
HttpResponseMessage response = await client.SendAsync(httpRequestMessage);

if (response.StatusCode == System.Net.HttpStatusCode.OK)
{
var content = await response.Content.ReadAsStringAsync();
response.Content = new StringContent(content);
response.EnsureSuccessStatusCode();
response.Content.Headers.ContentEncoding.Add("UTF8");
response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/pdf");
response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment")
{
FileName = "test.pdf"
};
return response;

直接进入API2会产生:%PDF-1.6%ãÏÓ

通过API2生成:%PDF-1.6%

我尝试在API1上更改ContentType和ContentEncoding,没有任何乐趣。

有什么事情可以跳到任何人身上吗?

1 个答案:

答案 0 :(得分:3)

在二进制文档上调用.ReadAsStringAsync不起作用 - 您必须调用.ReadAsByteArrayAsync。 您还必须使用ByteArrayContent代替StringContent

未经过测试