2011-06-27 22 views
0

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

我知道我不能直接从控制器返回它或传递查看作为变量等我的应用程序的大部分是做不同的XML来源,模式和格式之间的转换,所以这是非常重要的,我设置这个权利从开始。

但是有没有更好的方法来做到这一点?

在此先感谢!

+0

你能详细说明'XML呈现输出'是什么意思吗? (你想显示颜色格式,缩进等XML?) –

+0

oooh对不起,我现在看到它有点混淆 –

回答

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); 
} 

随意执行任何XSD验证,等等,你可能需要ExecuteResult方法内。如果你发现自己在需要的

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

这是说:

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

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

,然后交换大量的XML,你可能会考虑使用WCF。如果您需要POX,请考虑WCF REST。

+0

我建议也添加一个控制器扩展方法'Xml()',所以它会更符合现有的* *的结果。然后可以简单地写:'返回Xml(model);'与其他操作结果类似。 –

+0

+1在这里,并删除我自己的答案,因为你在我添加它时弹出了。我会添加@ Robert的评论,支持'XmlSerializer' *或*'DataContractSerializer'可能是一个想法。 –

+1

@Robert Koritnik,很好的建议,我已经更新了我的答案,并将其考虑在内。 –

相关问题