在ASP.net MVC2中返回XML数据的最佳实践

本文关键字:数据 最佳 XML 返回 ASP net MVC2 | 更新日期: 2023-09-27 18:00:24

我想知道从MVC2应用程序创建XML输出并将其返回到客户端的最佳方式是什么(可能还使用XSD方案验证)?

我知道我不能直接从控制器返回它,也不能作为变量传递给视图等。我的应用程序的很大一部分是在不同的XML源、模式和格式之间进行转换,所以我从一开始就设置它非常重要。

但是有更好的方法吗?

提前感谢!

在ASP.net MVC2中返回XML数据的最佳实践

您可以编写一个自定义ActionResult,它将把视图模型序列化为XML。字里行间的东西:

public class XmlResult : ActionResult
{
    private readonly object _model;
    public XmlResult(object model)
    {
        _model = model;
    }
    public override void ExecuteResult(ControllerContext context)
    {
        if (_model != null)
        {
            var response = context.HttpContext.Response;
            var serializer = new XmlSerializer(_model.GetType());
            response.ContentType = "text/xml";
            serializer.Serialize(response.OutputStream, _model);
        }
    }
}

然后:

public ActionResult Foo()
{
    SomeViewModel model = ...
    return new XmlResult(model);
}

请随意执行ExecuteResult方法中可能需要的任何XSD验证等。

正如@Robert Koritnik在评论部分所建议的那样,你也可以写一个扩展方法:

public static class ControllerExtensions
{
    public static ActionResult Xml(this ControllerBase controller, object model)
    {
        return new XmlResult(model);
    }
}

然后:

public ActionResult Foo()
{
    SomeViewModel model = ...
    return this.Xml(model);
}

话虽如此,如果您发现自己需要交换大量XML,您可能会考虑使用WCF。如果您需要POX,请考虑WCF REST.