Swagger, созданный с использованием NSwag, не найден для службы ASP.Net Core Service Fabric при использовании httpsys с измененным путем прослушивателя.

Когда мы использовали NSwag с настройками по умолчанию для службы ASP.Net Core Service Fabric, которая изменила URL-адрес слушателя HttpSys (добавлен суффикс пути), сгенерированный swagger.json и пользовательский интерфейс не были найдены / недоступны.

Установка URL-пути для HttpSys Listener:

protected override IEnumerable<ServiceInstanceListener> CreateServiceInstanceListeners()
    {
        return new ServiceInstanceListener[]
        {
            new ServiceInstanceListener(serviceContext =>
                new HttpSysCommunicationListener(serviceContext, "ServiceEndpoint", (url, listener) =>
                {
                    url += "/service1";
                    ServiceEventSource.Current.ServiceMessage(serviceContext, $"Starting HttpSys on {url}");


                    return new WebHostBuilder()
                                .UseHttpSys()
                                .ConfigureServices(
                                    services => services
                                        .AddSingleton<StatelessServiceContext>(serviceContext))
                                .UseContentRoot(Directory.GetCurrentDirectory())
                                .UseStartup<Startup>()
                                .UseServiceFabricIntegration(listener, ServiceFabricIntegrationOptions.None)
                                .UseUrls(url)
                                .Build();
                }))
        };
    }

И настройка приложения NSwag для службы ASP.Net Core:

public void ConfigureServices(IServiceCollection services)
    {
        services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);

        // Register the Swagger services
        services.AddSwagger();
    }

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }

        app.UseMvc();

        // Register the Swagger generator and the Swagger UI middlewares
        app.UseSwaggerUi3WithApiExplorer(settings =>
        {
            settings.GeneratorSettings.DefaultPropertyNameHandling =
                PropertyNameHandling.CamelCase;
        });
    }

1 ответ

Мы решили эту проблему, предоставив Swagger Route и Swagger UI Port в настройках NSwag следующим образом:

app.UseSwaggerUi3WithApiExplorer(settings =>
{
    settings.GeneratorSettings.DefaultPropertyNameHandling =
    PropertyNameHandling.CamelCase;
    settings.SwaggerUiRoute = "/swagger";
    settings.SwaggerRoute = "/api-specification.json";
});

Пользовательский интерфейс Swagger стал доступен в файлах baseurl/service1/swagger и swagger.json в файле baseurl/service1/api-ification.json

Кажется, что в случае, когда мы не меняли настройки swaggerroute, NSwag использовал какое-то значение по умолчанию и игнорировал изменение пути URL, которое мы сделали для слушателя HttpSys.

Другие вопросы по тегам