gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 22:35:48 25 4
gpt4 key购买 nike

我目前对基本的 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() 但同样的区别(并尝试过)。这是我在无数示例中看到并以前做过的方式。

我有一个 Controller 和一个 Action ,基本上是这样的:

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

现在,当我运行时,我会在 Postman 中得到它:

{"success": true}

因此它适用于(或至少默认)JSON。

然后,如果我请求改用 header Accept: application/xml,我现在会收到 HTTP 错误 406。

如果我取消 options.ReturnHttpNotAcceptable = true;,无论如何它都会返回 JSON。

我错过了什么?我坐在那里挠头。据我所知,我已经注册了一个可接受的内容格式化程序。

最佳答案

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

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

关于c# - 无法在 ASP.NET Core 2 中序列化为 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47954167/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com