Пользовательский ActionResult для ответа HTTP из нескольких частей?
-
06-07-2019 - |
Вопрос
Я хотел бы ответить на запрос http и файлом txt, и страницей html. Таким образом, клиент может сохранить файл и просмотреть сводную информацию о содержимом этого файла через HTML-страницу.
Поскольку файл генерируется на лету, я должен использовать управление состоянием на сервере для генерации сводки по второму запросу. Я хотел бы избежать этого и обернуть это в один ответ.
Как будет выглядеть пользовательский ActionResult?
Решение
Это также обсуждалось здесь на SO . р>
я ответил так:
Нет, составные вложения для скачать (как в электронном письме) не поддерживается по соображениям безопасности. Это называется «загрузка с диска».
Обратите внимание, что Gmail обрабатывает это динамически архивировать файлы. Вы должен тоже. http://forums.asp.net/t/1240811.aspx
Я не верю, что какой-либо современный браузер поддерживает multipart / mixed.
Другие советы
Вы можете отправить XML со ссылкой на таблицу стилей XSLT. Браузер может выполнить преобразование и отобразить итоговый вывод HTML.
И пользователь может просто сделать " Файл-> Сохранить как ... " хранить файл XML.
Почему бы не отобразить сводку как обычный просмотр HTML и не предоставить ссылку под этой сводкой, которая указывает на отдельный ActionResult, который возвращает двоичные данные ...
public ActionResult SendFile(int id)
{
File file = FileRepository.GetFile(id);
byte[] fileData = file.FileData.ToArray();
return File(fileData, file.FileMimeType, file.FileName);
}
Я провел поиск по этой теме, и, к моему удивлению, похоже, что люди уже сделали это. Я нашел описание здесь , но оно не является общедоступным проверить URI, поэтому я не могу проверить поведение браузера на этом. Также упоминается решение для отправки файла архива клиенту. Но я предполагаю, что это не то, что вы ищете, верно?
Здесь есть другая статья, показывающая пример с несколькими частями ответы. К сожалению, демонстрационный URI, похоже, больше не работает.
Таким образом, ситуация такова: HTTP многокомпонентные ответы могут быть сделаны. Есть клиентские (несколько) библиотек, которые могут обрабатывать их в коде приложения. Поведение браузера нужно проверить ( Вот голос ). Использование этой функции кажется экспериментальным и может быть рекомендовано, только вы можете контролировать оба конца связи, чтобы устранить проблемы взаимодействия.