xml - 为什么我的 ASP.Net Core Web API Controller 不返回 XML?

标签 xml asp.net-web-api asp.net-core asp.net-core-mvc

我有以下简单的 Web API Controller :

    // GET: api/customers
    [HttpGet]
    public async Task<IActionResult> Get()
        {
        var customers = await uow.Users.GetAllAsync();
        var dto = customers.Select(p => new CustomerDto {Id = p.Id, Email = p.Email, UserName = p.UserName});
        return Ok(dto); // IEnumerable<CustomerDto>
        }

在 Postman 中,我将接受 header 设置为 application/xml , 但无论我尝试什么,我都只能取回 JSON 数据。

Postman screen shot

我在某处读到,为了获得 XML,我必须添加 [DataContract][DataMember]我的 DTO 的属性,现在看起来像这样:

[DataContract]
public class CustomerDto
    {
    [DataMember]
    public string Id { get; set; }

    [Required]
    [EmailAddress]
    [Display(Name = "Email")]
    [DataMember]
    public string Email { get; set; }

    [Required]
    [Display(Name = "Login Name")]
    [DataMember]
    public string UserName { get; set; }
    }

我已经用了几个小时了,只是不明白为什么它不起作用。我试过:

  • 使 Action 方法同步和异步

  • 直接返回数据,设置返回类型为IEnumerable<CustomerDto>

  • 将集合转换为数组而不是列表

  • 返回 IActionResult

  • 返回单个项目,而不是集合

  • 我已通过在调试器中检查它来验证 Accept header 显示在请求中。

  • 大量“使用 Bing 进行谷歌搜索”并阅读各种博客

  • 从模板创建一个新的 WebAPI 项目并查看那里是否有任何灵感(不是真的)。​​

    我希望它很简单,但我看不到...

最佳答案

Xml 格式化程序是单独包的一部分:Microsoft.AspNetCore.Mvc.Formatters.Xml

添加上述包并更新您的 startup.cs,如下所示:

services
    .AddMvc()
    .AddXmlDataContractSerializerFormatters();

services
    .AddMvc()
    .AddXmlSerializerFormatters();

关于xml - 为什么我的 ASP.Net Core Web API Controller 不返回 XML?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38316358/

相关文章:

java - 我无法添加另一行按钮

asp.net-web-api - 如何在.net web api中将DateTime对象作为json传递

c# - 如何在 ASP.NET Web API 中获取依赖解析器的实例

asp.net - 异步/等待和异步 Controller ?

asp.net-core - Code First 中的 Identity 和 Mysql - 指定的键太长;最大 key 长度为 1000 字节

asp.net - 在 Controller 中缓存 ASP.NET 5

c# - IAsyncActionFilter 返回空白页

c# - LINQ to XML 查询同级元素

php - 解析 XML 太慢?

javascript - 不使用 AJAX 加载 XML 文件