Swagger未正常显示多数路由仅识别PUT请求问题求助
问题排查与解决方案
Swagger仅识别PUT接口,其余GET/POST接口未显示,针对这个问题可按以下步骤排查修复:
1. 启用Swagger对属性路由的支持
你的控制器使用了属性路由(Attribute Routing),需在Swagger配置中显式启用注解支持,确保属性路由被正确扫描:
修改SwaggerConfig.cs:
public class SwaggerConfig { public static void Register(HttpConfiguration config) { config.EnableSwagger(c => { c.SingleApiVersion("v1", "DefaultApi"); c.ApiKey("Token") .Description("Bearer token") .Name("Authorization") .In("header"); // 启用注解支持,识别属性路由 c.EnableAnnotations(); // 解决潜在的路由冲突 c.ResolveConflictingActions(apiDescriptions => apiDescriptions.First()); }).EnableSwaggerUi(c => { c.EnableApiKeySupport("Authorization", "header"); }); } }
2. 修正方法路由的相对路径格式
控制器前缀[Route("api/[controller]")]与方法路由组合时,建议给方法路由添加斜杠前缀,明确相对路由规则:
修改控制器方法的路由配置:
[HttpGet, Authorize(Roles = "Admin")] [Route("/GetMe")] public IHttpActionResult GetMe() { // ... 方法实现 } [HttpGet] [Route("/CorsTest")] public IHttpActionResult CorsTest() { // ... 方法实现 } [HttpPost] [Route("/register")] public IHttpActionResult Register(UserRegister request) { // ... 方法实现 }
3. 确保Swagger扫描目标程序集
若项目包含多个程序集,需在Swagger配置中明确指定扫描的程序集,避免遗漏控制器:
// 在EnableSwagger配置内添加 c.ScanForApiControllers(typeof(AuthController).Assembly);
4. 清理缓存并重新生成项目
- 右键项目选择「清理」,清除旧编译文件
- 重新生成解决方案(Ctrl+Shift+B)
- 重启调试服务,刷新Swagger UI页面
5. 检查Swashbuckle版本兼容性
确保Swashbuckle.WebApi版本与ASP.NET Web API版本兼容,建议安装适配的稳定版本:
Install-Package Swashbuckle.WebApi -Version 5.6.0
内容的提问来源于stack exchange,提问作者xguysOG
相关产品推荐
相关产品推荐

