在ASP.NET MVC中,从控制器的操作返回XML的最佳方式是什么?有一种很好的方法可以返回JSON,但不适用于XML。我真的需要通过View来路由XML吗,或者我是否应该采用Response.Write的非最佳实践方式?
发布于 2010-12-01 23:29:52
return this.Content(xmlString, "text/xml");
发布于 2012-10-04 06:55:47
如果您正在使用优秀的Linq-to-XML框架构建XML,那么这种方法会很有帮助。
我在操作方法中创建了一个XDocument
。
public ActionResult MyXmlAction()
{
// Create your own XDocument according to your requirements
var xml = new XDocument(
new XElement("root",
new XAttribute("version", "2.0"),
new XElement("child", "Hello World!")));
return new XmlActionResult(xml);
}
这个可重用的自定义ActionResult
会为您序列化XML。
public sealed class XmlActionResult : ActionResult
{
private readonly XDocument _document;
public Formatting Formatting { get; set; }
public string MimeType { get; set; }
public XmlActionResult(XDocument document)
{
if (document == null)
throw new ArgumentNullException("document");
_document = document;
// Default values
MimeType = "text/xml";
Formatting = Formatting.None;
}
public override void ExecuteResult(ControllerContext context)
{
context.HttpContext.Response.Clear();
context.HttpContext.Response.ContentType = MimeType;
using (var writer = new XmlTextWriter(context.HttpContext.Response.OutputStream, Encoding.UTF8) { Formatting = Formatting })
_document.WriteTo(writer);
}
}
如果需要,您可以指定MIME类型(如application/rss+xml
)以及是否应缩进输出。这两个属性都有合理的默认值。
如果您需要UTF8以外的编码,那么也可以简单地为其添加一个属性。
发布于 2009-10-16 14:11:36
如果您只对通过请求返回xml感兴趣,并且您有xml“块”,那么您可以这样做(作为控制器中的一个操作):
public string Xml()
{
Response.ContentType = "text/xml";
return yourXmlChunk;
}
https://stackoverflow.com/questions/134905
复制相似问题