Asp.net core 如何仅显示带有实际应发送字段的Swashbuckle参数对象?

Asp.net core 如何仅显示带有实际应发送字段的Swashbuckle参数对象?,asp.net-core,swagger,swashbuckle,Asp.net Core,Swagger,Swashbuckle,我开始使用AspNetCore库 在我的API中放入一个包含引用的对象时,它会显示为需要发送引用的所有字段,而只有标识符(Id) 下面是一个例子: 模型结构: 公共类Cidade { 公共长Id{get;set;} 公共字符串Nome{get;set;} 公共Uf{get;set;} } 公共类用友 { 公共长Id{get;set;} 公共字符串Nome{get;set;} 公共Pais Pais{get;set;} } 公共类PAI { 公共长Id{get;set;} 公共字符串Nome{ge

我开始使用AspNetCore库

在我的API中放入一个包含引用的对象时,它会显示为需要发送引用的所有字段,而只有标识符(Id)

下面是一个例子: 模型结构:
公共类Cidade
{
公共长Id{get;set;}
公共字符串Nome{get;set;}
公共Uf{get;set;}
}
公共类用友
{
公共长Id{get;set;}
公共字符串Nome{get;set;}
公共Pais Pais{get;set;}
}
公共类PAI
{
公共长Id{get;set;}
公共字符串Nome{get;set;}
}
及以下的空气污染指数:
[产生(“应用程序/json”)]
[路线(“api/Cidade”)]
公共类控制器:控制器
{        
//职位:api/Cidade
[HttpPost]
公共无效帖子([FromBody]Cidade值)
{
}
}
《大摇大摆》的结果如下:

我想要的是以下内容(仅限
uf.id
):


我怎样才能得到这个结果呢?我在查看我的样本,我想我找到了一些你可以使用的东西:

在我的案例中,我添加了更多,您需要的更少,但您仍然需要的只是一个自定义示例

JSON如下所示:

"PolygonVolumeInsideParameter": {
  "properties": {
    "Points": {
      "items": {
        "$ref": "#/definitions/Location"
      },
      "xml": {
        "name": "Location",
        "wrapped": true
      },
      "example": [
        {
          "Lat": 1.0,
          "Lon": 2.0
        },
        {
          "Lat": 5.0,
          "Lon": 6.0
        }
      ],
      "type": "array"
    },
    "PlanId": {
      "type": "string"
    }
  },
  "xml": {
    "name": "PolygonVolumeInsideParameter"
  },
  "type": "object"
},
在Swashback上,我添加了一个示例,其中包含一个
ISchemaFilter
我的代码在这里:

我按照的逻辑来获得我的解决方案,如下所示:

我构建了一个模式过滤器,以向引用属性(
Ref
)添加一个示例,该属性有一个名为“Id”的属性:

公共类ApplySchemaRefIdExtensions:ISchemaFilter
{
public void Apply(架构、SchemaFilterContext上下文)
{
if(schema.Properties!=null)
{
foreach(schema.Properties中的var p)
{
if(p.Value.Example==null&&p.Value.Ref!=null)
{
var reference=context.SystemType.GetProperty(p.Value.Ref.Split(“/”).LastOrDefault();
如果(引用!=null)
{
var id=reference.PropertyType.GetProperty(“id”);
如果(id!=null)
{
p、 Value.Example=new
{
Id=123
};
p、 Value.Ref=null;
}
}
}
}
}
}
}
Startup.cs
上:

services.AddSwaggerGen(c=>
{
// ...
c、 SchemaFilter:

我想你可以提供自己的自定义示例……你能分享一下你的招摇过市吗!