Swagger json 验证未使用的模型警告
Posted
技术标签:
【中文标题】Swagger json 验证未使用的模型警告【英文标题】:Swagger json validation unused model warnings 【发布时间】:2021-05-21 11:52:05 【问题描述】:我遇到了 OpenApi json 数据验证问题。基于 OpenApi 验证(或 editor.swagger.io),我的 JSON 文件有未使用的模型。我应该摆脱警告,几乎所有警告都来自 System.Reflection 命名空间。
例子:
: System.Reflection
- Unused model: PropertyInfo
- Unused model: MethodImplAttributes
- Unused model: FieldAttributes
- Unused model: EventAttributes
- Unused model: MethodAttributes
- Unused model: FieldInfo
- Unused model: PropertyAttributes
: 其余的
- Unused model: Type --system
- Unused model: SecurityRuleSet --system.security
json 是在我运行应用程序时生成的(带有 swagger 包的 .NET Core 3.1)
Install-Package Swashbuckle.AspNetCore -Version 5.6.3
Startup.cs
// Clears servers list and adds default server entry with relative url respecting
app.UseSwagger(c=>c.ForceSingleServerWithRelativeAddress());
app.UseSwaggerUI(c =>
c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API V1");
c.RoutePrefix = string.Empty;
c.EnableDeepLinking();
);
如果 System.Reflection 包在项目的其他地方(或任何其他命名空间,如 System.Security 等)使用,我如何才能摆脱这些警告。我不能只是自定义 MS 包来摆脱未使用的模型,它就是这样。
我在 Swagger 设置期间是否遗漏了任何启动选项,是否会导致问题?
警告(未使用的模型)没有给我任何堆栈跟踪、root 或任何东西,仅仅是因为项目中不存在未使用的模型?
在项目某处使用 system.reflection 的示例方法:
public async Task<IEnumerable<IssueSimple>> GetSimpleIssues(int id)
string method = MethodBase.GetCurrentMethod().Name; //that one using System.Reflection
return null; // not to expose business logic
用于验证的Open Api命令(json和open api文件必须在同一个文件夹中)
java -jar openapi-generator-cli-5.1.1.jar validate -i gittesting.json
部分json文件:
"PropertyInfo":
"type": "object",
"properties":
"name":
"type": "string",
"nullable": true,
"readOnly": true
,
"declaringType":
"$ref": "#/components/schemas/Type"
,
"reflectedType":
"$ref": "#/components/schemas/Type"
,
"customAttributes":
"type": "array",
"items":
"$ref": "#/components/schemas/CustomAttributeData"
,
"nullable": true,
"readOnly": true
,
"isCollectible":
"type": "boolean",
"readOnly": true
,
"metadataToken":
"type": "integer",
"format": "int32",
"readOnly": true
,
"memberType":
"$ref": "#/components/schemas/MemberTypes"
,
"propertyType":
"$ref": "#/components/schemas/Type"
,
"attributes":
"$ref": "#/components/schemas/PropertyAttributes"
,
"isSpecialName":
"type": "boolean",
"readOnly": true
,
"canRead":
"type": "boolean",
"readOnly": true
,
"canWrite":
"type": "boolean",
"readOnly": true
,
"additionalProperties": false
////////////////////////////////////////////////////
////////////////////////////////////////////////////
"PropertyAttributes":
"enum": [
"None",
"SpecialName",
"RTSpecialName",
"HasDefault",
"Reserved2",
"Reserved3",
"Reserved4",
"ReservedMask"
],
"type": "string",
"format": "int32"
,
一般问题是,为什么在未使用此模型时添加此模型?当 MS 包全局添加未使用的模型时,如何摆脱它们?
【问题讨论】:
【参考方案1】:这是由内部控制器属性和错误返回类型(设置错误)引起的。与 open api/swagger 本身无关。
【讨论】:
以上是关于Swagger json 验证未使用的模型警告的主要内容,如果未能解决你的问题,请参考以下文章
Blazor Swagger:无法加载 API 定义。获取错误:未定义 /swagger/v1/swagger.json
RestAssured 中的无效 JSON Schema 异常,同时针对来自 swagger 的模式进行验证
加载 API 定义失败,获取错误:未定义 /swagger/v1/swagger.json