weixin_40576400 2021-10-27 15:18 采纳率: 80.8%
浏览 43
已结题

.NET CORE 3.1 WEBAPI项目中配置SWAGGER问题

我在学习.NET CORE 3.1 WEBAPI项目中配置SWAGGER,最后并没有出来想要的界面(界面如下图),不知道如何处理,向各位专家请教。

另外,在我程序中,有好几个Controllers页(例如:BindingWechatController,CustomerController,WeatherForecastController等等),程序是怎么知道应该调用哪个页面的呢?

代码:


```c#
namespace expressApi
{
    public class Startup
    {
        ///// <summary>
        ///// </summary>
        //public static ILoggerRepository repository { get; set; }

        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }

        public IConfiguration Configuration { get; }
        
        /// <summary>
        /// 依赖注入
        /// </summary>
        /// <param name="services"></param>
        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddControllers();
            services.AddSwaggerGen(m => m.SwaggerDoc("v1", new OpenApiInfo
            {
                Title = "expressApi",  //标题
                Version = "v1",
                Description = $".net core Http API v1"    //描述
            })
            );
        }
        private static void Register(IServiceCollection services)
        {
        }
        /// <summary>
        /// 依赖注入
        /// </summary>
        /// <param name="app"></param>
        /// <param name="env"></param>
        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            app.UseHttpsRedirection();
           app.UseRouting();

            app.UseAuthorization();
            app.UseSwagger();
            app.UseSwaggerUI(m => m.SwaggerEndpoint("/swagger/v1/swagger.json", "expressApi"));


            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllers();
            });
        }
    }
}

```

问题界面

img

  • 写回答

2条回答 默认 最新

  • CSDN专家-showbo 2021-10-27 17:22
    关注

    题主检查下所有Controller文件中是否存在其他public方法,一般controller中public的方法是对外提供服务的

    启用swagger后Controller中只能有一个HttpPost和HttpGet(如果没有加HttpPost/HttpGet属性,默认为HttpGet)的public方法,如果存在多个swagger会不知道调用这个controller下的哪个方法
    比如下面这个

    
    namespace webapi.Controllers
    {
        [ApiController]
        [Route("[controller]")]
        public class uploadFileController : ControllerBase
        {
    
            [HttpPost]
            public IActionResult upload([FromBody] Dictionary<string, string> fileDTO)
            {
    
                return Content("POST");
            }
            [HttpGet("Get")]
            public IActionResult Get()
            {
    
                return Content("test");
            }
    
            public string Get1() { return "Get1"; }
        }
    }
    
    
    

    存在2个HttpGet属性的方法(Get1没有申明),会导致swagger出错不知道显示哪个,但是对于webapi项目来说是没有问题的。

    img

    第一个get可以通过/uploadfile/get访问,第二个用/uploadfile

    去掉其中一个或者改为private就正常显示了

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 11月4日
  • 已采纳回答 10月27日
  • 修改了问题 10月27日
  • 创建了问题 10月27日

悬赏问题

  • ¥100 c语言,请帮蒟蒻写一个题的范例作参考
  • ¥15 名为“Product”的列已属于此 DataTable
  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)