Пользовательский ActionResult для ответа HTTP из нескольких частей? - PullRequest
4 голосов
/ 23 июня 2009

Я бы хотел ответить на запрос http и файлом txt, и страницей html. Таким образом, клиент может сохранить файл и просмотреть сводную информацию о содержимом этого файла на html-странице.

Поскольку файл генерируется на лету, мне нужно использовать управление состоянием на сервере для генерации сводки по второму запросу. Я хотел бы избежать этого и обернуть это в один ответ.

Как будет выглядеть пользовательский ActionResult?

Ответы [ 4 ]

2 голосов
/ 03 июля 2009

Это было также обсуждалось здесь на SO .

я ответил так:

Нет, составные вложения для скачать (как в электронном письме) не поддерживается по соображениям безопасности. Это называется "загрузка с диска".

Обратите внимание, что Gmail обрабатывает это динамически архивировать файлы. Вы должен тоже. http://forums.asp.net/t/1240811.aspx

Я не верю, что какой-либо современный браузер поддерживает multipart / mixed.

0 голосов
/ 26 июня 2009

Вы можете отправить XML со ссылкой на таблицу стилей XSLT. Браузер может выполнить преобразование и отобразить итоговый вывод HTML.

И пользователь может просто сделать «Файл-> Сохранить как ...» для сохранения файла XML.

0 голосов
/ 02 июля 2009

Я провел поиск по этой теме, и, к моему удивлению, похоже, что люди уже сделали это. Я нашел описание здесь , но оно не предоставляет открытый тестовый URI, поэтому я не смог протестировать поведение браузера на этом. Также упоминается решение для отправки файла архива клиенту. Но я предполагаю, что это не то, что вы ищете, верно?

Здесь - другая статья, показывающая пример с многочастными ответами. К сожалению, демонстрационный URI, похоже, больше не работает.

Таким образом, ситуация такова: HTTP многокомпонентные ответы могут быть сделаны. Есть клиентские (несколько) библиотек, которые могут обрабатывать их в коде приложения. Поведение браузера должно быть проверено ( Вот голос ). Использование этой функции кажется экспериментальным и может быть рекомендовано, только вы можете контролировать оба конца связи, чтобы устранить проблемы взаимодействия.

0 голосов
/ 23 июня 2009

Почему бы не отобразить сводку как обычный HTML-вид и не предоставить ссылку под этой сводкой, которая указывает на отдельный ActionResult, который возвращает двоичные данные ...

public ActionResult SendFile(int id)
    {
        File file = FileRepository.GetFile(id);
        byte[] fileData = file.FileData.ToArray();
        return File(fileData, file.FileMimeType, file.FileName);
    }
...