简体   繁体   中英

Swagger generated using NSwag not found for ASP.Net Core Service Fabric service when using httpsys with altered listener path

When we used NSwag with default settings for ASP.Net Core Service Fabric service, which had altered HttpSys listener url (added path suffix), the generated swagger.json and UI where not found/accessible.

Setting url path for 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();
                }))
        };
    }

And setting app NSwag for ASP.Net Core service:

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;
        });
    }

We solved this by providing swagger Route and Swagger UI Port within NSwag settings in following way:

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

Swagger UI became available on baseurl/service1/swagger and swagger.json file on baseurl/service1/api-specification.json

It seems, that in case when we did not change swaggerroute settings, NSwag used some default value and was ignoring the change of url path we have done for HttpSys listener.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM