You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从MVC控制器返回XML数据?(Visual Studio 2015环境)

嘿,我来帮你解决这个问题!在Visual Studio 2015的MVC项目里返回XML数据,你之前用XmlResult没成功,大概率是因为默认MVC框架并没有内置XmlResult这个类型——它不是原生的ActionResult子类,所以得自己定义或者换其他方法。下面给你几种靠谱的实现方式:

方法一:自定义XmlResult类(推荐用于重复场景)

如果你想像用JsonResult那样方便地返回XML,最好自己封装一个XmlResult,这样可以在多个控制器里复用。代码如下:

public class XmlResult : ActionResult
{
    private readonly object _data;
    private readonly string _contentType;

    public XmlResult(object data) : this(data, "application/xml")
    {
    }

    public XmlResult(object data, string contentType)
    {
        _data = data;
        _contentType = contentType;
    }

    public override void ExecuteResult(ControllerContext context)
    {
        if (context == null)
            throw new ArgumentNullException(nameof(context));

        var response = context.HttpContext.Response;
        response.ContentType = _contentType;

        if (_data != null)
        {
            var serializer = new XmlSerializer(_data.GetType());
            using (var writer = new StringWriter())
            {
                serializer.Serialize(writer, _data);
                response.Write(writer.ToString());
            }
        }
    }
}

之后在控制器里就可以直接用了:

public ActionResult GetXmlData()
{
    var yourDataObject = new YourModel { Property1 = "Value1", Property2 = 123 };
    return new XmlResult(yourDataObject);
}
方法二:用ContentResult直接返回XML字符串(简单快捷)

如果只是单次使用,不想自定义类,可以先把对象序列化成XML字符串,再通过ContentResult返回,指定正确的内容类型:

public ActionResult ReturnXml()
{
    var model = new YourModel { Name = "Test", Id = 456 };
    var serializer = new XmlSerializer(typeof(YourModel));
    string xmlString;

    using (var sw = new StringWriter())
    {
        serializer.Serialize(sw, model);
        xmlString = sw.ToString();
    }

    return Content(xmlString, "application/xml");
}

这种方式不需要额外定义类,适合临时需求。

方法三:用FileResult返回XML文件流(适合大数据)

如果你的XML数据量比较大,或者需要让用户下载XML文件,可以用FileResult返回流:

public ActionResult DownloadXml()
{
    var model = new YourLargeModel();
    var serializer = new XmlSerializer(typeof(YourLargeModel));
    var memoryStream = new MemoryStream();

    serializer.Serialize(memoryStream, model);
    memoryStream.Position = 0; // 重置流位置到开头

    return File(memoryStream, "application/xml", "data.xml");
}

这样用户访问这个Action时,会直接下载名为data.xml的文件。

内容的提问来源于stack exchange,提问作者Jeremy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:24:24