Asp.net core 如何仅显示带有实际应发送字段的Swashbuckle参数对象?
我开始使用AspNetCore库 在我的API中放入一个包含引用的对象时,它会显示为需要发送引用的所有字段,而只有标识符(Id) 下面是一个例子: 模型结构: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
公共类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:
我想你可以提供自己的自定义示例……你能分享一下你的招摇过市吗!