我有以下简单的 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 数据。
我在某处读到,为了获得 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/