Я бы написал результат произвольного действия:
public class XmlResult : ActionResult
{
private readonly object _data;
public XmlResult(object data)
{
if (data == null)
{
throw new ArgumentNullException("data");
}
_data = data;
}
public override void ExecuteResult(ControllerContext context)
{
// You could use any XML serializer that fits your needs
// In this example I use XmlSerializer
var serializer = new XmlSerializer(_data.GetType());
var response = context.HttpContext.Response;
response.ContentType = "text/xml";
serializer.Serialize(response.OutputStream, _data);
}
}
и затем в моем контроллере:
public ActionResult GetFoo(int id)
{
FooModel foo = _repository.GetFoo(id);
return new XmlResult(foo);
}
И если это return new XmlResult(foo);
кажется вам ужасным, вы можете использовать метод расширения:
public static class ControllersExtension
{
public static ActionResult Xml(this ControllerBase controller, object data)
{
return new XmlResult(data);
}
}
и затем:
public ActionResult GetFoo(int id)
{
FooModel foo = _repository.GetFoo(id);
return this.Xml(foo);
}