public static CorsOptions UseConfiguredCors(this CorsOptions builder, string policyName, IConfiguration section)
        {
            CorsPolicyOptions policy = new CorsPolicyOptions();

            ConfigurationBinder.Bind(section, policy);
            builder.AddPolicy(policyName, policy.Build());
            return(builder);
        }
Exemplo n.º 2
0
        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            // needed to load configuration from appsettings.json
            services.AddOptions();

            // needed to store rate limit counters and ip rules
            services.AddMemoryCache();

            //load general configuration from appsettings.json
            services.Configure <IpRateLimitOptions>(Configuration.GetSection("IpRateLimiting"));

            // inject counter and rules stores
            services.AddSingleton <IIpPolicyStore, MemoryCacheIpPolicyStore>();
            services.AddSingleton <IRateLimitCounterStore, MemoryCacheRateLimitCounterStore>();

            // the clientId/clientIp resolvers use it.
            services.AddSingleton <IHttpContextAccessor, HttpContextAccessor>();

            // configuration (resolvers, counter key builders)
            services.AddSingleton <IRateLimitConfiguration, RateLimitConfiguration>();

            //enables Application Insights telemetry collection.
            services.AddApplicationInsightsTelemetry();

            // get CORS Options
            var corsPolicyOptions = new CorsPolicyOptions();

            Configuration.GetSection(nameof(CorsPolicyOptions)).Bind(corsPolicyOptions);
            CorsPolicyName = corsPolicyOptions.Name;

            services.AddCors(options => // Make sure you call this previous to AddMvc
            {
                options.AddPolicy(name: corsPolicyOptions.Name,
                                  builder =>
                {
                    builder.WithOrigins(corsPolicyOptions.Origin)
                    .WithHeaders(HeaderNames.ContentType, corsPolicyOptions.JsonHeader)
                    .WithMethods("GET", "POST", "PUT", "DELETE", "OPTIONS")
                    .AllowCredentials();
                });
            });

            var swaggerDocOptions = new SwaggerDocOptions();

            Configuration.GetSection(nameof(SwaggerDocOptions)).Bind(swaggerDocOptions);

            services.AddSwaggerGen(swagger =>
            {
                swagger.SwaggerDoc(swaggerDocOptions.Version, new OpenApiInfo
                {
                    Title       = swaggerDocOptions.Title,
                    Version     = swaggerDocOptions.Version,
                    Description = swaggerDocOptions.Description,
                    Contact     = new OpenApiContact
                    {
                        Name = swaggerDocOptions.Organization
                    }
                });

                var security = new Dictionary <string, IEnumerable <string> >
                {
                    { "Bearer", new string[0] }
                };

                swagger.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme
                {
                    Description = "JWT Authorization header using the Bearer scheme.",
                    Name        = "Authorization",
                    In          = ParameterLocation.Header,
                    Type        = SecuritySchemeType.ApiKey,
                    Scheme      = "Bearer"
                });

                swagger.AddSecurityRequirement(new OpenApiSecurityRequirement()
                {
                    {
                        new OpenApiSecurityScheme
                        {
                            Reference = new OpenApiReference
                            {
                                Type = ReferenceType.SecurityScheme,
                                Id   = "Bearer"
                            },
                            Scheme = "oauth2",
                            Name   = "Bearer",
                            In     = ParameterLocation.Header,
                        },
                        new List <string>()
                    }
                });

                var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";
                var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile);
                swagger.IncludeXmlComments(xmlPath);
            });

            // Register InvestEdge.Application Service Configurations
            services.AddApplication();

            // Add InvestEdge.Infrastructure Service Configuration
            services.AddInfrastructure(Configuration, Environment);

            services.AddControllers()
            .AddFluentValidation(options => options.RegisterValidatorsFromAssemblyContaining <Startup>());;
        }