You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET 6 Web API如何在Swagger UI中显示OData响应内容类型?

解决方案

1. 完善OData配置并添加EDM模型

OData需要EDM模型来识别实体类型,同时要显式开启常用查询功能。修改Startup.cs(或Program.cs)中的OData配置:

services.AddControllers()
    .AddOData(options =>
    {
        options.EnableQueryFeatures(100);
        // 开启OData核心查询能力
        options.Select().Filter().OrderBy().Expand().Count().SetMaxTop(100);
        // 注册EDM模型并绑定路由前缀
        options.AddRouteComponents("api", GetEdmModel());
    });

补充EDM模型定义(可放在Startup/Program类中,或单独类文件):

private static IEdmModel GetEdmModel()
{
    var builder = new ODataConventionModelBuilder();
    builder.EntitySet<SubmissionSummaryDTO>("SubmissionSummaries");
    return builder.GetEdmModel();
}

2. 配置Swagger识别OData媒体类型

在Swagger生成配置中,添加OData专属的媒体类型映射,确保操作过滤器能正确识别:

services.AddSwaggerGen(c =>
{
    // 为OData集合类型映射对应的媒体类型
    c.MapType<List<SubmissionSummaryDTO>>(() => new OpenApiSchema
    {
        Type = "array",
        Items = new OpenApiSchema
        {
            Reference = new OpenApiReference { Type = ReferenceType.Schema, Id = "SubmissionSummaryDTO" }
        },
        MediaType = "application/json;odata.metadata=minimal"
    });

    // 启用自定义OData查询过滤器
    c.OperationFilter<Controllers.EnableQueryFilter>();
});

3. 控制器显式指定Produces类型

在Action上添加[Produces]属性,明确声明支持的OData媒体类型:

[HttpGet]
[Route("summary/odata")]
[EnableQuery()]
[Produces("application/json;odata.metadata=minimal", "application/json")]
[ProducesResponseType(200, Type = typeof(List<SubmissionSummaryDTO>))]
// 其他ProducesResponseType...
public async Task<ActionResult<List<SubmissionSummaryDTO>>> GetSummaryOdata()
{
    // 原有代码...
}

如果需要为特定状态码单独指定内容类型,可扩展ProducesResponseType的ContentTypes参数:

[ProducesResponseType(200, Type = typeof(List<SubmissionSummaryDTO>), ContentTypes = new[] { "application/json;odata.metadata=minimal" })]

关于Swagger定义内容类型的说明

Swagger支持通过[Produces]属性全局声明Action的响应内容类型,也可以通过[ProducesResponseType]的ContentTypes参数为单个状态码指定专属的内容类型,两者配合就能让Swagger UI正确显示OData相关的响应头信息。

内容的提问来源于stack exchange,提问作者Mose

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 00:45:40