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

ASP.NET API返回Dictionary类型时Swagger UI示例显示为空的问题

解决ASP.NET API返回Dictionary时Swagger响应示例为空的问题

问题原因

你当前使用的[ProducesResponseType]等属性指定的类型(如List<Door>、IEnumerable<Country>)和接口实际返回的Dictionary<int, string>不匹配,导致Swagger无法正确识别返回结构,只能显示空对象{}。

解决方法

1. 修正响应类型属性

将控制器方法上的响应类型属性替换为实际返回的Dictionary<int, string>类型,示例代码如下:

/// <summary>
/// 获取属性ID与属性描述的键值对字典
/// </summary>
/// <param name="x">测试参数</param>
/// <param name="y">示例参数</param>
/// <returns>属性ID与属性描述的键值对字典</returns>
/// <remarks>排除用户无权限访问的属性</remarks>
[Route("Test/{x}/{y}")]
[HttpGet]
[ProducesResponseType(typeof(Dictionary<int, string>), StatusCodes.Status200OK)]
public Dictionary<int, string> Test(bool x, bool y)
{
    return propertiesService.GetPropertyList(x, y);
}

2. 配置Swagger生成Dictionary的示例(可选)

如果修正属性后仍无法显示示例,可以在Swagger的服务配置中手动映射Dictionary<int, string>的结构和示例,以Program.cs为例:

builder.Services.AddSwaggerGen(c =>
{
    c.SwaggerDoc("v1", new OpenApiInfo { Title = "你的API名称", Version = "v1" });
    
    // 为Dictionary<int, string>定义Swagger显示的结构和示例
    c.MapType<Dictionary<int, string>>(() => new OpenApiSchema
    {
        Type = "object",
        Example = new OpenApiObject
        {
            ["1"] = new OpenApiString("属性描述1"),
            ["2"] = new OpenApiString("属性描述2")
        }
    });
});

3. 使用自定义示例提供器(可选)

如果需要更灵活的示例生成,可以安装Swashbuckle.AspNetCore.Filters包,然后创建示例提供类:

public class DictionaryExample : IExamplesProvider<Dictionary<int, string>>
{
    public Dictionary<int, string> GetExamples()
    {
        return new Dictionary<int, string>
        {
            { 1, "属性A" },
            { 2, "属性B" }
        };
    }
}

然后在控制器方法上添加[SwaggerResponseExample(StatusCodes.Status200OK, typeof(DictionaryExample))]属性,同时在Swagger配置中启用示例支持:

builder.Services.AddSwaggerGen(c =>
{
    // 其他配置...
    c.ExampleFilters();
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 10:47:23