json - ASP.NET Core .NET 6 应用程序默认返回 XML 而不是 JSON

标签 json xml asp.net-core soap

我们正在将 .NET 2.2 应用迁移到 .NET 6,但我们遇到了一个问题:一些向我们的系统发出请求但未指定 Accept HTTP header 的第三方应用会返回.NET 2.2 中默认使用 JSON 数据,但现在在未指定任何内容的情况下它们会获取 XML。

如果我运行相同的请求,但将 Accept 指定为 application/json,我会返回 JSON。

我们的应用程序以 JSON 形式返回 99% 的结果,但有一个返回 XML 的特定 SOAP 端点(它与另一个 SOAP Web 服务通信并在此单个端点上返回 SOAP)。

配置是:

services.AddSoapCore();

services
    .AddMvc()
    .AddXmlSerializerFormatters()
    .AddNewtonsoftJson(options => options.SerializerSettings.Converters.Add(new StringEnumConverter()));

如果我删除 AddXmlSerializerFormatters(),端点会正确返回 JSON,但 SOAP 端点会停止工作。

我知道我可以使用 [Produces] 属性,但理想情况下我们会保持相同的默认行为,而不必手动遍历所有端点。

有没有办法将应用程序配置为在未指定任何内容时默认返回 JSON,而不删除 XML 支持?

最佳答案

Asp.NET Core 按优先级选择已注册的格式化程序,并且它们添加的顺序将成为它们的优先级。因此,当您首先添加 XML 格式化程序时,当请求中没有出现 Accept header 时,第一个匹配的格式化程序将是 XML 格式化程序。只需先添加 JSON 格式化程序即可。

我重现了该问题并首先添加了 JSON 格式化程序,成功解决了问题

builder.Services
  .AddMvc()
  .AddNewtonsoftJson(options => options.SerializerSettings.Converters.Add(new StringEnumConverter()))
  .AddXmlSerializerFormatters();

关于json - ASP.NET Core .NET 6 应用程序默认返回 XML 而不是 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72570575/

相关文章:

javascript - 如何监听try/catch语句中特定的JSON错误代码?

php - 如何使用这样的脚本或文本编辑器批量更新位于 .html 文件中的基本一对一 key 结构?

javascript - 使用 jQuery 从 JSON 创建动态嵌套列表

javascript - 如何使用JQuery正确获取跨域的xml

asp.net-core - ASP.Net Core SignalR 不记名 token 协商

json - 为什么返回的 JSON 的大数字在 pretty-print 时会四舍五入?

java - 在java中应用XSLT获取XML输出中的输入XML标签名称

java - 为 json 字符串创建 java 解析器

c# - 在 ActionFilter 中间件中使用 DbContext

asp.net-core - SystemJS(带有 jspm 的 Aurelia)无法从 jspm_packages 文件夹加载 "aurelia-pal-browser"