【发布时间】:2019-07-26 09:07:43
【问题描述】:
我编写了返回文件的 WebAPI GET 方法,我检查了 SoapUI 的工作情况。现在我想调用该服务并将文件作为 PDF 保存在本地驱动器中,我正在从服务中获得响应,但是如何将响应转换为 PDF 格式的文件?
public async Task<IActionResult> FileIndex()
{
try
{
HttpClientHandler clientHandler = new HttpClientHandler();
clientHandler.ServerCertificateCustomValidationCallback = (sender, cert, chain, sslPolicyErrors) => { return true; };
HttpClient client = new HttpClient(clientHandler);
HttpResponseMessage response = await client.GetAsync("https://test-server/api/files");
if (response.IsSuccessStatusCode)
{
var output= await response.Content.ReadAsAsync<byte[]>();
System.IO.File.WriteAllBytes(@"E:\testpdf.pdf", output);
}
}
catch (Exception ex)
{
}
return View();
}
在var output... 上抛出异常
读取字节时出错。意外标记:StartObject。路径“版本”, 第 1 行,位置 11
SoapUI 中的响应
{
"version": {
"major": 1,
"minor": 1,
"build": -1,
"revision": -1,
"majorRevision": -1,
"minorRevision": -1
},
"content": {"headers": [
{
"key": "Content-Disposition",
"value": ["attachment; filename=\"About Us.pdf\""]
},
{
"key": "Content-Type",
"value": ["application/octet-stream"]
}
]},
"statusCode": 200,
"reasonPhrase": "OK",
"headers": [],
"requestMessage": null,
"isSuccessStatusCode": true
}
【问题讨论】:
-
那么当你运行上面的代码时出了什么问题呢? API 的响应实际上是否已经包含 PDF 格式的数据,或者它是否返回其他内容,并且您想基于该数据创建 PDF 文档?有点不清楚
-
Web API 响应的
Content-Type是什么?如果不是application/pdf,那么您实际上并没有在响应中收到 PDF 文档。 -
在``` var output```上抛出异常“读取字节时出错。意外的标记:StartObject。路径'版本',第1行,位置11。”。添加响应
-
这看起来像是 SOAPUI 读取 HTTP 标头并以 JSON 格式显示给您?还是那是实际的响应体??
-
P.S.
catch (Exception ex) { }是 anti-pattern。它会阻止您查看代码是否有错误。如果您要捕获异常,您至少必须在某处记录异常详细信息,以便您可以看到正在发生的错误,并能够使用这些信息来诊断原因。
标签: c# http pdf asp.net-core asp.net-core-webapi