Как создать и загрузить XML, не сохраняя его на сервере

У меня есть приложение ASP.NET Web Forms. Я хотел бы создать ссылку для скачивания, чтобы предоставить пользователю возможность скачать файл XML. Однако файл не должен храниться на сервере.

В моем файле ASPX у меня есть ссылка для скачивания (размещен внутри GridView):

 <asp:HyperLinField Text="Download" DataNavigateUrlFormatString="download.aspx?ProductId={0}" DataNavigateUrlFields="ProductId">

На странице download.aspx.vb:

Dim productId As String = Request.QueryString("productId")
Dim xmlDoc As String = _ProductServices.GetXmlDocPerId(productId)
Dim xdoc As XmlDocument = New XmlDocument()
xdoc.LoadXml(xmlLicense)

Теперь я хотел бы создать файл, поместить содержимое XML внутри и передать его пользователю, не сохраняя его на сервере. Должен ли я использовать MemoryStream в сочетании с StreamReader?

2 ответа

Решение

Вам не нужно создавать файл - у вас уже есть содержимое XML в вашем XmlDocument, который вы можете напрямую выводить в браузер.

Непроверенный пример:

Response.ContentType = "application/xml"
Response.Clear()

xdoc.Save(Response.OutputStream)
Response.Flush()

Обновить:

Чтобы браузер отображал диалог загрузки, вам просто нужно добавить content-disposition заголовок:

Response.AddHeader("Content-Disposition", "attachment; filename=some_name.xml");

Это может быть так просто, как:

Private Sub SendResults()
         'Write the XML for the DataSet.
         Page.Response.ContentType = "text/xml"
         Page.Response.Output.Write(xmlContentAsString)
         Page.Response.End()
    End Sub

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

Другие вопросы по тегам