C# 从Web Api控制器返回XML

C# 从Web Api控制器返回XML,c#,xml,asp.net-mvc,asp.net-web-api,C#,Xml,Asp.net Mvc,Asp.net Web Api,如何指定从web api控制器返回xml?在一个浏览器中,数据以xml形式打开,在另一个浏览器中以JSON形式打开 编辑 以下是我的行动: [HttpGet] public IEnumerable<MagazineMeta> GetLastUploadPdfMeta(int count) { List<MagazineMeta> metas = _metaRepository .GetAll()

如何指定从web api控制器返回xml?在一个浏览器中,数据以xml形式打开,在另一个浏览器中以JSON形式打开

编辑

以下是我的行动:

    [HttpGet]
    public IEnumerable<MagazineMeta> GetLastUploadPdfMeta(int count)
    {
       List<MagazineMeta> metas = _metaRepository
                 .GetAll()
                 .OrderBy(e => e.TimeAdd)
                 .Take(count)
                 .ToList();

       return metas;
    }
[HttpGet]
公共IEnumerable GetLastUploadPdfMeta(整数计数)
{
列表元=\u元存储库
.GetAll()
.OrderBy(e=>e.TimeAdd)
.记(数)
.ToList();
返回元;
}

将这两行添加到Global.asax.cs中的应用程序开始的末尾:

GlobalConfiguration.Configuration.Formatters.Clear();
GlobalConfiguration.Configuration.Formatters.Add(new System.Net.Http.Formatting.XmlMediaTypeFormatter());
编辑:
正如@YishaiGalatzer所指出的,要实现最初提出的问题,这是一个相当快速和肮脏的解决方法。要获得所需的响应格式,请在请求中包含适当的Accept标头(在本问题的上下文中为“application/xml”)

,对于其他想要强制使用json的人,请调用以下命令:

GlobalConfiguration.Configuration.Formatters.Clear();
GlobalConfiguration.Configuration.Formatters.Add(new System.Net.Http.Formatting.JsonMediaTypeFormatter());

要使响应序列化,还需要一行

GlobalConfiguration.Configuration.Formatters.XmlFormatter.UseXmlSerializer = true;

您当前的代码是什么样子的?到目前为止您是否尝试过任何操作?是否有任何属性指定“是”返回数据格式?为什么要这样做?ASP.NET WebAPI以调用方请求的格式返回数据。显然,一个浏览器请求它是XML,另一个是JSON。@NET,是的。查看HTTP接受头。“application/xml”和“application/json”是从web api分别请求xml和json时会看到的两个常见值。这是一个非常糟糕的常规做法。通过这种方式,您将Json完全从图片中删除。这是一把大锤子。Web API具有内容协商支持,这只是将其关闭。请看这篇关于如何的文章:根据这个问题,NET总是希望返回XML,而不考虑标题,那么为什么要进行向下投票呢?因为这种做法是错误的,这是一个大问题,而您展示的是一个相当糟糕的示例。首先,用户可能希望为每个请求者返回正确的格式,这在问题中不是很清楚。第二,有一种方法可以做到干净,这样就不会影响应用程序中的其他区域。我会给出两个答案,而不是一个快速而肮脏的方法来解决它。(除非答案经过编辑,否则无法获得否决票)是的,这是真的,这是一种不好的做法,但正如我所说,答案是针对原始问题给出的,而原始问题严厉地去除了JSON。我编辑了答案,并添加了在问题评论中整理出来的细节。请随时提出更好的解释,我将进一步编辑。当做谢谢在我的第一条评论中,查看Kiran Challa的博客,关于如何通过每个动作实现这一点。