You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET Core(.NET6)自定义Controller无法显示在Swagger的问题

问题解决:ASP.NET Core(.NET6)自定义控制器未在Swagger中显示

问题描述

在ASP.NET Core(.NET6)项目中集成Swagger时,仅默认的WeatherForecast控制器能在Swagger界面中显示,自定义的HotelRoomController未被识别。已安装Swashbuckle.AspNetCore.Swagger、Swashbuckle.AspNetCore.SwaggerGen、Swashbuckle.AspNetCore.SwaggerUI包,期望该控制器调用HotelRoomRepository的方法并在Swagger中正常展示。

核心问题分析

查看提供的HotelRoomController代码,发现GetHotelRooms方法使用了private访问修饰符:

[HttpGet]
private async Task<IActionResult> GetHotelRooms()
{
    var allRooms = await _hotelRoomRepository.GetAllHotelRoom();
    return Ok(allRooms);
}

Swagger仅会扫描并展示控制器中public的Action方法,私有方法无法被Swagger的ApiExplorer组件识别,这是导致自定义控制器未显示的直接原因。

另外,当前控制器继承的是Controller,对于纯API场景,推荐继承ControllerBase(避免引入视图相关的冗余功能),但这并非Swagger不识别控制器的核心原因。

解决方案

  1. 将Action方法的访问修饰符改为public
    修改GetHotelRooms方法的修饰符,确保Swagger能扫描到该接口:

  2. (可选但推荐)让API控制器继承ControllerBase
    针对纯API控制器,继承ControllerBase更贴合场景,减少不必要的依赖。

修改后的HotelRoomController代码:

using Business.Repository.IRepository;
using Microsoft.AspNetCore.Mvc;

namespace HiddenVilla_API.Controllers
{
    [Route("api/[controller]")]
    [ApiController]
    public class HotelRoomController : ControllerBase // 改为继承ControllerBase
    {
        private readonly IHotelRoomRepository _hotelRoomRepository;

        public HotelRoomController(IHotelRoomRepository hotelRoomRepository)
        {
            _hotelRoomRepository = hotelRoomRepository;
        }

        /// <summary>
        /// 获取所有酒店房间
        /// </summary>
        /// <returns></returns>
        [HttpGet]
        public async Task<IActionResult> GetHotelRooms() // 改为public修饰符
        {
            var allRooms = await _hotelRoomRepository.GetAllHotelRoom();
            return Ok(allRooms);
        }
    }
}
  1. 确认Swagger配置(当前配置已正确)
    项目中的Swagger服务与中间件配置已满足要求:
    • 已添加builder.Services.AddEndpointsApiExplorer();和builder.Services.AddSwaggerGen(...)服务注册
    • 开发环境中已启用app.UseSwagger()和app.UseSwaggerUI(...)中间件
      这部分无需额外修改。

验证结果

修改完成后重启项目,访问Swagger页面(默认地址:https://localhost:<端口>/swagger),即可看到HotelRoomController及其GetHotelRooms接口正常展示。

内容的提问来源于stack exchange,提问作者RRuseva

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 21:45:35