Как создать файл XML из представления ASP.NET MVC? - PullRequest
1 голос
/ 15 февраля 2010

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

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

Если я использую атрибут [Authorize] в методе 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());
        }
    }
}

Ответы [ 2 ]

2 голосов
/ 16 февраля 2010

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

[HttpGet, Authorize]
public ActionResult Download()
{
    Response.Headers["Content-Disposition"] = string.Format(
        "attachment; filename=newfile{0}.xml", DateTime.Now.ToFileTime());
    return XmlView();
}
0 голосов
/ 20 февраля 2010

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

[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());
}
...