【问题标题】:.NET & Swagger started to get 401 error.NET & Swagger 开始出现 401 错误
【发布时间】:2018-08-06 16:44:01
【问题描述】:

我已经为我的 .NET Core webApi 应用程序配置了 Swagger,这是它的配置

        public void ConfigureServices(IServiceCollection services)
        {
            services.AddAuth();

            services.AddCors(options =>
            {
                options.AddPolicy("CorsPolicy",
                    builder => builder.AllowAnyOrigin()
                        .AllowAnyMethod()
                        .AllowAnyHeader()
                        .AllowCredentials()
                        .Build());
            });

            services.AddMvc();
            services.AddSwaggerGen(c =>
            {
                c.SwaggerDoc("v1",
                    new Info
                    {
                        Version = "v1",
                        Title = "XXX Synchronization API",
                        Description = "XXX Synchronization API",
                        TermsOfService = "None",
                        Contact = new Contact { Name = "XXX Inc.", Email = "XXXX", Url = "XXX.com" }
                    });
                c.IncludeXmlComments(GetXmlCommentsPath());
                c.DescribeAllEnumsAsStrings();
            });

            services.AddSingleton<IHashProvider, Pbkdf2Version1HashProvider>();
            services.AddSingleton<IPasswordHasher, PasswordHasher>();
            services.AddTransient<IAuthenticationService, GfdAuthenticationService>();
            services.AddSingleton(new GfdSqlServerDatabase(Gfd2Configuration.Settings.GfdSqlServerConnectionString));
            services.AddSingleton(new MySqlSyncDatabase(Gfd2Configuration.Settings.AwsMySqlConnectionString));
            services.AddTransient<SyncRepository, AwsMySqlSyncRepository>();
            services.AddHostedService<QueuedHostedService>();
            services.AddSingleton<IBackgroundTaskQueue, BackgroundTaskQueue>();
            services.AddSingleton<ArchivedJobProcessorBase, ArchivedJobProcessorFeatures>();
        }

        /// <summary>
        /// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        /// </summary>
        /// <param name="app"></param>
        /// <param name="env"></param>
        public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }

            app.UseAuthentication();
            app.UseCors("CorsPolicy");
            app.UseMvc();

            app.UseSwagger();

#if DEBUG
            app.UseSwaggerUI(c => { c.SwaggerEndpoint("/swagger/v1/swagger.json", "XXXX Synchronization API V1"); });
#else
            app.UseSwaggerUI(c => { c.SwaggerEndpoint("/sync/swagger/v1/swagger.json", "XXX Synchronization API V1"); });
#endif
        }

一切都很好。由于某种原因,今天早上每当我打开/swagger url 时,我都会收到 401 错误。 我不需要对 Swagger 文档和 UI 进行任何身份验证,一切都是公开的。

这可能与.NET Core 2.1.2 有关吗?

使用Swashbuckle.AspNetCore 3.0.0

欢迎提出任何想法。

【问题讨论】:

  • 那是因为您放置了app.UseAuthentication(); 之前 app.UseSwaggerUI(...)。中间件按注册顺序执行
  • 我把它移到了UseSwaggerUI 之后,得到了一些 401 错误。其他东西在这里。

标签: asp.net-core swagger swashbuckle


【解决方案1】:

对于那些可能遇到此类问题的人来说,修复实际上非常简单。对于我的一个实际需要身份验证的新 webApi 控制器,我忘记添加属性 [Route("api/[controller]")],因为 /swagger url 指向该控制器,因此 401 错误。去图:)

【讨论】:

    【解决方案2】:

    当我添加一个路径错误的新端点时,这个问题发生在我身上。

    我用[Route("/{id}")]

    它的开头应该没有正斜杠[Route("{id}")]

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-04
      • 2018-09-22
      • 1970-01-01
      • 1970-01-01
      • 2012-07-19
      • 1970-01-01
      • 1970-01-01
      • 2016-05-04
      相关资源
      最近更新 更多