将 Net Core Web 项目部署到服务器时 Swagger UI 的 URL 路径问题

问题描述 投票:0回答:1

在我的 Net Core Web 项目中,我有一个“Startup.cs”文件,其中包含以下脚本:

namespace HangfireProject
{
    public class Startup
    {
        public class MyAuthorizationFilter : IDashboardAuthorizationFilter
        {
            public bool Authorize(DashboardContext context) => true;
        }

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

        public IConfiguration Configuration { get; }

        public void ConfigureServices(IServiceCollection services)
        {
            services.AddSingleton(Configuration);

            services.AddHangfire
            (x => x.UseSqlServerStorage
                (
                    Configuration.GetConnectionString("HangfireConnection")
                )
            );

            services.AddHangfireServer();

            services.AddSwaggerGen(options =>
            {
                options.SwaggerDoc("v1", new OpenApiInfo { Title = "HangfireProject", Version = Environment.GetEnvironmentVariable("BUILD_VERSION") ?? "v1" });
            });

            services.AddControllers();
            services.AddRazorPages();

            services.AddHealthChecks()
                    .AddCheck("Version", () => HealthCheckResult.Healthy(Environment.GetEnvironmentVariable("BUILD_VERSION") ?? "v1"))
                    .AddSqlServer(
                                    Configuration.GetConnectionString("HangfireConnection"),
                                    healthQuery: "SELECT 1;",
                                    name: "HangfireConnection",
                                    failureStatus: HealthStatus.Degraded,
                                    tags: new string[] { "SqlServer", "HangfireConnection" }
                                 );
        }

        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            var pathBase = Configuration["API_PATH_BASE"] ?? "";

            if(!string.IsNullOrWhiteSpace(pathBase))
            {
                app.UsePathBase($"/{pathBase.TrimStart('/')}");
            }

            if(env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
                app.UseSwagger();

                app.UseSwaggerUI(c =>
                {
                    c.SwaggerEndpoint($"{pathBase}/swagger/v1/swagger.json", $"HangfireProject {Environment.GetEnvironmentVariable("BUILD_VERSION") ?? "v1"}");
                    c.RoutePrefix = "hangfire/swagger";
                });
            }
            else
            {
                app.UseExceptionHandler("/Error");
                app.UseHsts();
            }

            app.UseHangfireDashboard($"{pathBase}/hangfiredashboard", new DashboardOptions()
            {
                Authorization = new[] { new MyAuthorizationFilter() },
                IgnoreAntiforgeryToken = true
            });

            app.UseHttpsRedirection();
            app.UseStaticFiles();
            app.UseRouting();
            app.UseAuthorization();

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

            app.UseHealthChecks($"{pathBase}/infra/selfcheck", new HealthCheckOptions
            {
                Predicate = _ => true,
                ResponseWriter = UIResponseWriter.WriteHealthCheckUIResponse,

                ResultStatusCodes =
                {
                    [HealthStatus.Healthy] = StatusCodes.Status200OK,
                    [HealthStatus.Degraded] = StatusCodes.Status200OK,
                    [HealthStatus.Unhealthy] = StatusCodes.Status500InternalServerError,
                },

                AllowCachingResponses = true,
            });
        }
    }
}

当我在本地执行此 Web 项目时,我可以使用此 URL 正常访问 Swagger UI “https://localhost:32774/hangfire/swagger”

但是当我在服务器上执行此 Web 项目时,我无法使用此 URL 访问 Swagger UI “https://myproject.com/hangfire/swagger” 出现404错误时

--------------------

有人可以帮我分析一下这个问题的原因以及如何解决吗?

提前谢谢您。

c# asp.net swagger-ui
1个回答
0
投票

路径库配置: 确保 PathBase 配置设置正确。特别是在服务器上运行时,正确定义 PathBase 至关重要。如果它在服务器上的子目录中运行,这一点尤其重要。在本地运行时,这可能不会导致问题,但在服务器上可能会出现问题。

var pathBase = 配置[“API_PATH_BASE”] ?? “”; 检查 SwaggerUI 路径: 如果在服务器上运行时访问 SwaggerUI 出现问题,请检查 SwaggerUI 是否使用特定路径。特别注意以下代码块:

c.SwaggerEndpoint($"{pathBase}/swagger/v1/swagger.json", $"HangfireProject {Environment.GetEnvironmentVariable("BUILD_VERSION") ?? "v1"}"); 这可确保 SwaggerUI 使用正确的路径来查找 JSON 文档。

服务器设置: 检查您的服务器配置和正在使用的 Web 服务器的设置(IIS、Apache、Nginx 等)。确保服务器正确路由子目录并执行必要的重定向。

检查日志记录: 检查在服务器上运行时生成的日志记录。日志中的错误消息或警告可以提供对问题的深入了解。日志可能包含来自 Hangfire 或其他组件的错误消息。

Hangfire 和 Swagger 版本: 检查您正在使用的 Hangfire 和 Swagger 版本。您的开发环境和服务器环境可能不一致。如果需要,请将软件包更新到与服务器上运行的软件包兼容的版本。

通过执行以下步骤,您可以识别并可能解决问题。如果问题仍然存在,请考虑联系您的服务器管理员,以获取有关特定服务器功能和配置的更多信息。

© www.soinside.com 2019 - 2024. All rights reserved.