使用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><?xml version="1.0" encoding="utf-16"?> ... </string>
(本来是正确解码HTML实体的,所以您会看到:
<string><?xml version="1.0" encoding="utf-16"?> ... </string>
但现在甚至都没有这样做。)
答案 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"
};
}