У меня есть SPA и WebAPI.
Пользователь щелкает ссылку на SPA, которая предназначена для загрузки 2 файлов (PDF и XFDF).
У меня есть это действие WebAPI (источник: Что лучший способ обслуживать несколько двоичных файлов из одного метода WebApi? )
[HttpGet]
[Route("/api/files/both/{id}")]
public HttpResponseMessage GetBothFiles([FromRoute][Required]string id)
{
StreamContent pdfContent =null;
{
var path = "location of PDF on server";
var stream = new FileStream(path, FileMode.Open);
pdfContent = new StreamContent(stream);
pdfContent.Headers.ContentType = MediaTypeHeaderValue.Parse("application/vnd.adobe.xfdf");
}
StreamContent xfdfContent = null;
{
var path = "location of XFDF on server";
var stream = new FileStream(path, FileMode.Open);
xfdfContent = new StreamContent(stream);
xfdfContent.Headers.ContentType = MediaTypeHeaderValue.Parse("application/pdf");
}
var content = new MultipartContent();
content.Add(pdfContent);
content.Add(xfdfContent);
var response = new HttpResponseMessage();
response.Content = content;
return response;
}
В SPA я делаю это
window.location.href = "/api/files/both/5";
Результат. В браузере это JSON отображается
{
"Version": "1.1",
"Content": [{
"Headers": [{
"Key": "Content-Type",
"Value": ["application/vnd.adobe.xfdf"]
}
]
}, {
"Headers": [{
"Key": "Content-Type",
"Value": ["application/pdf"]
}
]
}
],
"StatusCode": 200,
"ReasonPhrase": "OK",
"Headers": [],
"TrailingHeaders": [],
"RequestMessage": null,
"IsSuccessStatusCode": true
}
Заголовок ответа (обратите внимание, что content-type = application / json)
HTTP/1.1 200 OK
x-powered-by: ASP.NET
content-length: 290
content-type: application/json; charset=utf-8
server: Microsoft-IIS/10.0
request-context: appId=cid-v1:e6b3643a-19a5-4605-a657-5e7333e7b99a
date: Tue, 04 Feb 2020 11:31:49 GMT
connection: close
Vary: Accept-Encoding
Исходный заголовок запроса (в если это интересно)
Host: localhost:8101
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:72.0) Gecko/20100101 Firefox/72.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Referer: http://localhost:8101/
DNT: 1
Connection: keep-alive
Cookie: MySession=....
Upgrade-Insecure-Requests: 1
Вопрос
- Как запрограммировать метод действия для возврата 2 файлов разных типов?