2010-02-15 2 views
1

Моя основная цель - создать файл XML, который можно загрузить.Как сгенерировать XML-файл из представления ASP.NET MVC?

Приведенный ниже код преуспевает в создании файла, но доступ к представлению (/ Home/XmlView) можно получить непосредственно.

Если я использую атрибут [Авторизовать] в методе XmlView(), то файл создается с помощью HTML-страницы моей страницы входа по умолчанию.

Как получить разрешение на работу с методом XmlView() или сделать все это более эффективно?

Я открыт для любых предложений.

Заранее спасибо.

using System; 
using System.Net; 
using System.Text; 
using System.Web.Mvc; 
using MvcProject.Core.Repositories; 

namespace MvcProject.Core.Web.Controllers 
{ 
    [HandleError] 
    public class HomeController : Controller 
    { 
     private readonly IEntryRepository _entryRepository; 

     public HomeController(IEntryRepository entryRepository) 
     { 
      _entryRepository = entryRepository; 
     } 

     [HttpGet] 
     [Authorize] 
     public ActionResult Download() 
     { 
      var url = Url.Action("XmlView", "Home", null, "http"); 

      var webClient = new WebClient 
           { 
            Encoding = Encoding.UTF8, 
            UseDefaultCredentials = true 
            //Credentials = CredentialCache.DefaultCredentials 
           }; 

      var fileStringContent = webClient.DownloadString(url); 

      var fileByteContent = Response.ContentEncoding.GetBytes(fileStringContent); 

      return File(fileByteContent, "application/xml", 
         string.Format("newfile{0}.xml", DateTime.Now.ToFileTime())); 
     } 

     //[Authorize] 
     public ActionResult XmlView() 
     { 
      return View("XmlView", _entryRepository.GetAll()); 
     } 
    } 
} 
+0

Вы пытаетесь создать файлы xml или excel? –

ответ

0

Я не собирался отвечать на мой собственный вопрос, но в итоге я создал форму с одним вводом (кнопка отправки), которая отправляет следующий метод:

[HttpPost, Authorize] 
public ActionResult Download() 
{ 
    Response.ContentType = "application/vnd.xls"; 
    Response.AddHeader("content-disposition", 
         "attachment;filename=" + 
         string.Format("Registrants-{0}.xls", String.Format("{0:s}", DateTime.Now))); 

    return View("XmlView", _entryRepository.GetAll()); 
} 
2

Похоже, что нужно создать представление с помощью WebClient. Поскольку действие Download связано с атрибутом [Authorize], вы можете просто вернуть XmlView() от Download. Для того, чтобы сделать это таким образом, представление рассматривается как вложение, добавить «Content-Disposition: вложение; имя файла = blah.xml» заголовок вашего ответа, как это:

[HttpGet, Authorize] 
public ActionResult Download() 
{ 
    Response.Headers["Content-Disposition"] = string.Format(
     "attachment; filename=newfile{0}.xml", DateTime.Now.ToFileTime()); 
    return XmlView(); 
} 
Смежные вопросы