Swashbuckle.Net45在.NET 4.6项目中Swagger UI不显示控制器怎么办
常见遗漏配置及排查方案
1. 注册顺序校验
- 必须保证
WebApiConfig.Register执行在Swagger配置注册之前,.NET Framework 中注册顺序错误会导致Swagger无法扫描到已注册的接口路由。 - 检查是否存在自定义路由规则拦截了api前缀的接口路径,保证默认路由模板
api/{controller}/{action}/{id}正常生效。
2. 控制器规范校验
- 控制器必须为
public访问修饰符,且继承自ApiController。 - 所有接口方法必须明确标记
[HttpGet]/[HttpPost]等请求类型特性,Swashbuckle默认不会扫描未声明请求类型的方法。
3. XML注释文件配置校验
- 右键项目→属性→生成页,勾选「XML文档文件」,路径填写
bin\[你的项目名称].xml,需要和SwaggerConfig.cs中IncludeXmlComments配置的路径完全一致。 - 若控制器写在Area区域下的,需要在Swagger配置中添加冲突处理规则:
GlobalConfiguration.Configuration .EnableSwagger(c => { c.SingleApiVersion("v1", "项目名称"); // 解决同路由冲突 c.ResolveConflictingActions(apiDescriptions => apiDescriptions.First()); // 确保XML路径匹配 c.IncludeXmlComments(string.Format(@"{0}\bin\项目名称.xml", System.AppDomain.CurrentDomain.BaseDirectory)); }) .EnableSwaggerUi(c =>{});
4. 多程序集扫描校验
如果控制器定义在独立的类库项目中,需要在Swagger配置中额外添加类库的XML注释文件引用:
c.IncludeXmlComments(string.Format(@"{0}\bin\控制器所在类库名称.xml", System.AppDomain.CurrentDomain.BaseDirectory));
5. 拦截规则校验
全局权限拦截器、Authorize全局特性、身份验证模块会拦截Swagger的接口文档请求,可在web.config中添加配置放行规则:
<location path="swagger"> <system.web> <authorization> <allow users="*"/> </authorization> </system.web> </location>
内容的提问来源于stack exchange,提问作者Michael Ivno
相关产品推荐
相关产品推荐

