.NET 6 Web API中Swashbuckle为何不显示请求Schema链接?
问题描述
使用Swashbuckle生成Swagger页面时,响应部分可以看到Schema链接(配图:响应Schema链接截图),但请求部分仅显示示例,没有Schema链接(配图:请求示例截图)。相关C#代码如下:
[HttpPost] [ApiVersion("2.0")] [Route("v2.0/Data")] [ProducesResponseType(StatusCodes.Status200OK, Type = typeof(FundInfoSimpleResponse))] [SwaggerRequestExample(typeof(FundInfoSimpleRequestV11), typeof(FundInfoSimpleRequestExampleV11))] [SwaggerResponseExample((int)HttpStatusCode.OK, typeof(FundInfoSimpleResponseExample))] public async Task<HttpResponseMessageResult> FundInfoSimple([FromBody] FundInfoSimpleRequestV11 request)
请问遗漏了什么配置?
解决方案
针对这个问题,可以从以下几个方面排查和修复:
确保请求模型被Swagger正确识别
在Startup.cs或Program.cs的Swagger配置中,确保扫描了包含FundInfoSimpleRequestV11模型的程序集,并且启用XML注释(若需要):services.AddSwaggerGen(c => { // 加载XML注释文件,需在项目属性中启用生成XML文档文件 var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml"; var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile); c.IncludeXmlComments(xmlPath); // 若使用Newtonsoft.Json,添加对应支持 c.AddSwaggerGenNewtonsoftSupport(); });正确启用Swashbuckle示例过滤器
由于使用了SwaggerRequestExample特性,需确保在Swagger配置中启用示例过滤器(该特性来自Swashbuckle.AspNetCore.Filters包):services.AddSwaggerGen(c => { // 其他配置... c.ExampleFilters(); }); // 注册示例提供器 services.AddSwaggerExamplesFromAssemblyOf<FundInfoSimpleRequestExampleV11>();检查包版本兼容性
确保Swashbuckle.AspNetCore与Swashbuckle.AspNetCore.Filters的版本匹配,版本不兼容可能导致Schema无法正常显示。验证请求模型结构
确认FundInfoSimpleRequestV11模型包含公共属性,且未被[JsonIgnore]等特性全部隐藏——Swagger需要可序列化的属性来生成Schema。明确请求内容类型
在控制器方法上添加[Consumes("application/json")]特性,明确请求的内容类型,帮助Swagger正确识别请求体的Schema:[HttpPost] [ApiVersion("2.0")] [Route("v2.0/Data")] [Consumes("application/json")] [ProducesResponseType(StatusCodes.Status200OK, Type = typeof(FundInfoSimpleResponse))] // 其他特性... public async Task<HttpResponseMessageResult> FundInfoSimple([FromBody] FundInfoSimpleRequestV11 request)
内容的提问来源于stack exchange,提问作者daxu
相关产品推荐
相关产品推荐

