【发布时间】:2019-12-21 01:29:02
【问题描述】:
我有一个 Web API (ASP.NET Core 2.2) 服务,我需要在其中循环遍历 OID 列表并通过 MemoryStream 返回编码为 FileStreamResult 的解码字节 []。如果我从列表中删除 OID 并且只运行一次,我可以将 FileStreamResult 作为 PDF 文档返回。我需要能够返回相同的 FileStreamResult,每个 OID 都被传递到 MemoryStream 中,但我只返回一个文本结果:
[
{
"fileStream": {
"canRead": true,
"canSeek": true,
"canWrite": true,
"capacity": 300009,
"length": 300009,
"position": 0,
"canTimeout": false
Controller 上的方法调用如下所示:
public async Task<IActionResult> Index(string searchValue)
{
var oid = await _oidLookup.LookupOid(searchValue);
byte[] documentBytes = await _extractDocument.ExtractDocument(oid.FirstOrDefault());
if (documentBytes != null)
{
MemoryStream ms = new MemoryStream(documentBytes);
return new FileStreamResult(ms, "application/pdf");
}
return Ok("No documents found");
}
但是当我把它改成:
if (oidList.Count > 0)
{
foreach (var oid in oidList)
{
byte[] documentBytes = await _extractDocument.ExtractDocument(oid);
if (documentBytes != null)
{
MemoryStream ms = new MemoryStream(documentBytes);
fileStreamResults.Add(new FileStreamResult(ms, "application/pdf"));
}
return fileStreamResults;
}
}
我得到了上面列出的文本结果。
如果我像这样遍历 OID 列表:
foreach (var oid in oids)
{
byte[] documentBytes = await _extractDocument.ExtractDocument(oid);
if (documentBytes != null)
{
MemoryStream ms = new MemoryStream(documentBytes);
return new FileStreamResult(ms, "application/pdf");
}
}
我只得到第一个文件。
我需要能够遍历 OID 列表并将每个 FileStreamResult 作为多个 PDF 文档返回。
【问题讨论】:
-
每个控制器方法只能返回 1 个任务。循环应该在调用方法中? Javascript 循环 ajax 调用该方法可能吗?您可能需要打开多个标签才能执行此操作....不太确定。
标签: c# asp.net-core asp.net-core-webapi