MVC .NET核心Web API XML或JSON

问题描述:

我想创建一个以XML或JSON形式返回数据的Web应用程序,我该如何去做这件事?MVC .NET核心Web API XML或JSON

型号:

namespace ReturningJSONandXML.Models 
{ 
    public class SomeImportantInformation 
    { 
     public int ID { get; set; } 
     public string Information { get; set; } 
    } 
} 

控制器:

namespace ReturningJSONandXML.Controllers 
{ 
    public class GetInfoController : Controller 
    { 
     // GET: /<controller>/ 
     public List<SomeImportantInformation> Get() 
     { 
      List<SomeImportantInformation> ImportantInfo = new List<SomeImportantInformation>(); 
      ImportantInfo.Add(new SomeImportantInformation { ID = 0, Information = "Awesome info" }); 
      ImportantInfo.Add(new SomeImportantInformation { ID = 1, Information = "Some other interesting info" }); 
      return ImportantInfo; 
     } 
    } 
} 

我想返回的XML和JSON文件...

什么是最好的做法的,我应该使用这里?

+4

t他的api会将响应转换为你放在请求头上的任何东西...... application/json或application/xml – NicoRiff

+3

如果你使用MVC 6(ASP.NET Core),框架将自动协商内容(返回适当的内容 - 键入为@NicoRiff说)。更多信息[在文档中](https://docs.microsoft.com/en-us/aspnet/core/mvc/models/formatting#content-negotiation)。 –

该框架自动为您处理,所以你不必重新发明*。答案在下面引用。但是为了简化:除非你指定了一个Accept头,API将把响应序列化为JSON。如果您指定例如'application/xml',它将返回XML。正如MSDN所述:

当客户端 指定Accept标头时,会发生内容协商(简称为conneg)。 ASP.NET Core MVC使用的默认格式是JSON。内容协商由ObjectResult实现。 也内置在状态码的具体操作结果中,从 返回的帮助器方法(都是基于ObjectResult的)。您也可以使用 返回模型类型(您定义的类为数据传输类型 ),并且框架将自动将其包装在ObjectResult 中。 只有在请求的 中出现Accept标头时才会进行内容协商。当请求包含accept头时,框架 将首选枚举accept头中的媒体类型,优先级为 ,并尝试找到一个格式化程序,该程序可以产生 响应,由accept头指定的一种格式。如果没有找到可以满足客户端请求的 格式化程序, 框架将尝试找到第一个可以产生 响应的格式化程序(除非开发人员已将MvcOptions 上的选项配置为返回406 Not Acceptable)。如果请求指定XML,则 但尚未配置XML格式化程序,则将使用JSON格式程序 。更一般地说,如果没有配置可以提供所请求的格式的格式化程序,那么第一个格式化程序可以使用格式为 的对象。如果没有给出头文件, 可以处理要返回的对象的第一个格式化程序将用于序列化 响应。在这种情况下,没有任何谈判正在进行 - 服务器正在确定它将使用的格式。

https://docs.microsoft.com/en-us/aspnet/core/mvc/models/formatting

与芯2,则需要的选项特别添加到MVC serverice启用XML输入/输出:

public void ConfigureServices(IServiceCollection services) 
    { 
     services.AddMvc(options => 
     { 
      options.InputFormatters.Add(new XmlSerializerInputFormatter()); 
      options.OutputFormatters.Add(new XmlSerializerOutputFormatter()); 
     }); 
    } 

,然后改变Accept首部到:

application/xml or application/json