我想知道从MVC2应用程序创建XML输出并将其返回给客户端(可能还使用XSD方案验证)的最佳方法是什么?
我知道我不能直接从控制器返回它或传递给视图变量等。我的应用程序的大部分是在不同的XML源,模式和格式之间进行转换所以我从一开始就设置这个非常重要。
但有没有更好的方法呢?
提前致谢!
答案 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。