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

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

Настройка пути URL для прослушивателя HttpSys:

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 Ответ

0 голосов
/ 07 ноября 2018

Мы решили эту проблему, предоставив 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.

...