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.