.NET Core:如何从StreamReader以XML输出字符串

时间:2018-07-16 23:44:01

标签: asp.net-mvc asp.net-core

使用MVC在.Net Core 2中做一个项目,我试图合并一个来自GitHub的项目,该项目为RSS feed生成XML。是TAlex.RSSFeedGenerator。

要生成实际文档,FeedGenerator的唯一选项是将其RSS对象序列化为MemoryStream:

public void Generate(Rss rss, Stream output)
{
  XmlSerializer serializer = new XmlSerializer(typeof(Rss));
  serializer.Serialize(output, rss);
}

因此FeedGenerator已经将RSS内容序列化为Stream中的XML,我想从MVC控制器(return Ok(content_here))以XML形式返回该内容。

我该怎么做?

最初/当前注册为:

var rss = new Rss();
// ...
var RssFeedGenerator = new FeedGenerator();
var output = new MemoryStream();
RssFeedGenerator.Generate(rss, output);
output.Position = 0;
var sreader = new StreamReader(output);
return Ok(sreader.ReadToEnd());

这将输出一个字符串,并被浏览器视为一个字符串。它不被视为XML或RSS。

MVC控制器的定义和装饰方式如下:

[HttpGet()]
[Produces("text/xml")]
public async Task<IActionResult> GetAsync() {...}

因此,我需要将已经是XML文档的字符串识别为XML文档,而不是字符串。我的目标也是直接将内容作为响应发送,而不是将其保存到文件中,然后将用户重定向到该文件,或者必须从文件中读取Ok()。

此外,我无法将MemoryStream直接发送到Ok(),因为我收到一个错误,即无法访问封闭的流。

浏览器当前正在显示以下内容:

<string>&lt;?xml version="1.0" encoding="utf-16"?&gt; ... </string>

(本来是正确解码HTML实体的,所以您会看到:

<string><?xml version="1.0" encoding="utf-16"?> ... </string>

但现在甚至都没有这样做。)

1 个答案:

答案 0 :(得分:0)

感谢您的澄清。

请返回ContentResult以便查看RSS XML。您可以具有“ application / xml”或“ application / RSS + XML”或“ text / xml”

public async Task<IActionResult> GetAsync()
    {
        string rssFeed = "<?xml >...";
        return new ContentResult
        {
            Content = rssFeed,
            ContentType = "application/RSS+xml"
        };
    }