コード例 #1
0
        public OutkeepHttpApiHostedService(
            ILogger <OutkeepHttpApiHostedService> logger,
            IOptions <OutkeepHttpApiServerOptions> apiOptions,
            IEnumerable <ILoggerProvider> loggerProviders,
            IGrainFactory factory)
        {
            _logger  = logger ?? throw new ArgumentNullException(nameof(logger));
            _options = apiOptions?.Value ?? throw new ArgumentNullException(nameof(apiOptions));

            _host = Host
                    .CreateDefaultBuilder()
                    .ConfigureLogging(logging =>
            {
                logging.ClearProviders();
                foreach (var provider in loggerProviders)
                {
                    logging.AddProvider(provider);
                }
            })
                    .ConfigureWebHostDefaults(web =>
            {
                web.ConfigureServices(services =>
                {
                    services.AddControllers();

                    services.AddCors(options =>
                    {
                        options.AddDefaultPolicy(policy =>
                        {
                            policy
                            .AllowAnyOrigin()
                            .AllowAnyHeader()
                            .AllowAnyMethod();
                        });
                    });

                    services.AddApiVersioning(options =>
                    {
                        options.ReportApiVersions = true;
                        options.DefaultApiVersion = new ApiVersion(1, 0);
                        options.AssumeDefaultVersionWhenUnspecified = true;
                    });

                    services.AddVersionedApiExplorer(options =>
                    {
                        options.GroupNameFormat = "'v'VVV";
                    });

                    services.AddSwaggerGen()
                    .AddTransient <IConfigureOptions <SwaggerGenOptions>, SwaggerGenOptionsConfigurator>();

                    services.AddSingleton(factory);

                    services.AddActivityMiddleware();
                });

                web.Configure((context, app) =>
                {
                    app.UseHttpsRedirection();
                    app.UseRouting();
                    app.UseAuthentication();
                    app.UseAuthorization();
                    app.UseSwagger();
                    app.UseSwaggerUI(options =>
                    {
                        foreach (var description in app.ApplicationServices.GetRequiredService <IApiVersionDescriptionProvider>().ApiVersionDescriptions.OrderByDescending(v => v.ApiVersion))
                        {
                            var vx = description.GroupName.ToLowerInvariant();
                            options.SwaggerEndpoint($"/swagger/{vx}/swagger.json", vx);
                        }
                    });

                    app.UseActivityMiddleware();
                    app.UseEndpoints(endpoints =>
                    {
                        endpoints.MapControllers();
                    });
                });

                if (_options.ApiUri != null)
                {
                    web.UseUrls(_options.ApiUri.ToString());
                }
            })
                    .Build();
        }
コード例 #2
0
 public SwaggerGenOptionsConfigurator(IApiVersionDescriptionProvider provider, IOptions <OutkeepHttpApiServerOptions> options)
 {
     this.provider = provider ?? throw new ArgumentNullException(nameof(provider));
     this.options  = options?.Value ?? throw new ArgumentNullException(nameof(options));
 }