2015-08-08 2 views
0

Я пытаюсь создать RSS-канал для моего веб-сайта ASP.NET MVC 5. Я создал несколько классов для создания XML с помощью XmlSerializer. Я использую этот сериалайзер внутри специального Result класса, который образовавшийся из FileResult:MVC Создайте RSS/Atom Feed с FileResult

public class RssResult : FileResult 
{ 
    public RssResult() : base("application/rss+xml") { } 

    protected override void WriteFile(HttpResponseBase response) 
    { 
     var seri = new XmlSerializer(typeof(RssFeed)); 
     seri.Serialize(response.OutputStream, this.Feed); 
    } 

    public RssFeed Feed { get; set; } 
} 

Тогда я написал метод расширения для Controller:

public static RssResult RssFeed(this Controller controller, RssFeed feed, string FileDownloadName = "feed.rss") 
{ 
    return new RssResult() 
    { 
     Feed = feed, 
     FileDownloadName = FileDownloadName 
    }; 
} 

Если я вызываю действие, которое возвращает RssResult Firefox и Интернет Проводник запрашивает у меня загрузку файла. Но я хочу видеть типичные интерфейсы читателей браузеров.

Что я делаю неправильно здесь, соответственно, что я должен изменить?

ответ

1

FileResult добавляет заголовок content-disposition, который запрашивает «загрузку» в браузере.

Если вы сериализовать ваши данные, просто возвращают content-type (например application/xml или то, что у вас уже есть (application/rss+xml) ... так что либо вернуть Content или вывести из ActionResult

Смотрите эту XMLResult example from MvcContrib - обратите внимание, что это происходит из ActionResult (не FileResult)

Hth ...

+0

Ах, вот оно что :) я изменил свои классы, чтобы они порождают из 'ContentResult'. – Koopakiller

Смежные вопросы