我有一个控制器,它目前只返回如下格式的XML数据:

[Produces(MediaTypeNames.Application.Xml)]
public class MyController  { /* implementation details */}

我想添加返回格式为JSON的数据的可能性,因此我将JSON媒体类型添加到ProducesAttribute中,如下所示

[Produces(MediaTypeNames.Application.Xml, MediaTypeNames.Application.Json)]
public class MyController  { /* implementation details */}

当HTTP请求具有正确的Accept Header时,它会按预期工作.但是当HTTP请求没有Accept报头时,控制器现在以JSON响应,而以前则以XML响应.

是否有方法在支持多种媒体类型格式的控制器上定义默认媒体类型响应?

我try 在属性构造函数中改变参数顺序,但没有改变任何事情

推荐答案

如果客户端请求没有指定任何Accept标头,或者使用*/*表示任何内容类型都是可接受的,则ASP.NET Core将使用JSON作为默认响应格式,因为JSON是现代Web API中更常用的格式.

要更改默认格式,可以使用输出格式化程序:

var builder = WebApplication.CreateBuilder(args);
    
builder.Services.AddControllers()
                .AddXmlSerializerFormatters()
                .AddMvcOptions(options =>
                {
                    var xmlFormatter = options.OutputFormatters.OfType<XmlSerializerOutputFormatter>().First();
                    options.OutputFormatters.Remove(xmlFormatter);
                    options.OutputFormatters.Insert(0, xmlFormatter);
                }); 
    
var app = builder.Build();
// ...rest of your configuration

以下是可以为您提供更多信息的官方文件:

Format response data in ASP.NET Core Web API

Asp.net相关问答推荐

ASP.NET MVC forEach 循环仅返回 1 个值

如何从 JavaScript 调用 C# 函数?

如何在 C# 中生成一个随机的 10 位数字?

如何在 IISExpress 上使用带有 localhost 的子域?

Anti-Forgery Token 适用于不同的基于声明的用户

无法读取配置部分system.servicemodel,因为它缺少部分声明

如何将 global.asax 文件添加到 ASP.NET MVC4 项目?

asp.net cookie、身份验证和会话超时

从后面的 asp.net 代码中读取表单身份验证 cookie

如何将图像 url 转换为 system.drawing.image

HttpResponse.End 或 HttpResponse.Close 与 HttpResponse.SuppressContent

什么时候应该使用 Response.Redirect(url, true)?

删除 HTML 或 ASPX 扩展

如何使用restsharp下载文件

IIS 8.0 ASP.NET 和错误 500.19

在 Visual Studio 2010 中随机禁用编辑 aspx/ascx 文件?

ASP.Net 哪个用户帐户在 IIS 7 上运行 Web 服务?

强制 IIS Express 进入classic 管道模式

Unity 中的单例每个调用上下文(Web 请求)

ASP.NET MVC3 局部视图命名约定