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

时间:2011-06-27 12:28:32

标签: c# xml asp.net-mvc

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

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

但有没有更好的方法呢?

提前致谢!

1 个答案:

答案 0 :(得分:4)

您可以编写一个自定义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。