c# – 无法在ASP.NET Core 2中序列化为XML

目前我对基本的ASP.NET Core 2 API项目和内容协商以及返回 JSON以外的其他内容感到非常困惑.

我之前在1.1项目中有过这个工作但不是在2.我基本上想要根据请求类型返回JSON或XML.

作为该要求的一部分,我设置了XML格式化程序,如下所示:

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

我也可以使用AddXmlSerializerFormatters()但相同的区别(和尝试).这是我在无数个例子中看到的并且之前已经完成的方式.

我有一个控制器和单个动作,基本上看起来像:

[Route("api/[controller]")]
public class DefaultController : Controller
{
    [HttpGet]
    [Route("")]
    public IActionResult Index()
    {
        return Ok(new
        {
            success = true
        });
    }
}

现在,当我跑步时,我在Postman中得到了这个:

{"success": true}

所以它对JSON起作用(或者至少是认值).

然后,如果我请求使用标头Accept:application / xml,我现在得到的HTTP错误为406.

如果我取消选项.ReturnHttpNotAcceptable = true;,它将返回JSON,无论如何.

我错过了什么?我坐在这上面摸不着头脑.据我所知,我已经注册一个可接受的内容格式化程序.

解决方法

您看到的问题是匿名类型无法序列化为XML,因此格式化程序失败并退回到JSON格式化程序.

解决方案:在需要返回XML时使用类.

相关文章

本文将从上往下,循序渐进的介绍一系列相关.NET的概念,先从...
基于 .NET 的一个全新的、好用的 PHP SDK + Runtime: Pe...
.NET 异步工作原理介绍。
引子 .NET 6 开始初步引入 PGO。PGO 即 Profile Guided Opti...
前言 2021/4/8 .NET 6 Preview 3 发布,这个版本的改进大多来...
前言 开头防杠:.NET 的基础库、语言、运行时团队从来都是相...