public void ConfigureServices(IServiceCollection services) { services.AddResponseCompression(); services.AddControllers() .AddNewtonsoftJson(options => options.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore) .AddFluentValidation(fv => fv.RegisterValidatorsFromAssemblyContaining <IRavenStore>()); services.AddOptions(); services.AddTransient <IJwtManager, JwtManager>(); services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme) .AddJwtBearer(options => { options.RequireHttpsMetadata = false; options.TokenValidationParameters = new TokenValidationParameters { ValidateIssuer = true, ValidIssuer = AuthorizationOptions.ISSUER, ValidateAudience = true, ValidAudience = AuthorizationOptions.AUDIENCE, ValidateLifetime = true, IssuerSigningKey = AuthorizationOptions.Create(AuthorizationOptions.KEY), ValidateIssuerSigningKey = true }; }); services.AddCors(o => o.AddPolicy("CorsPolicy", builder => { builder.AllowAnyOrigin() .AllowAnyHeader() .AllowAnyMethod(); })); services.AddApiVersioning(o => { o.ReportApiVersions = true; o.AssumeDefaultVersionWhenUnspecified = true; o.DefaultApiVersion = new ApiVersion(1, 0); }); services.AddSwaggerGen(c => { c.SwaggerDoc("v1", new OpenApiInfo { Version = "v1", Title = $"{nameof(Pegov.Nasvyazi.Api)}", }); c.ResolveConflictingActions(apiDescriptions => apiDescriptions.First()); c.CustomSchemaIds(x => x.FullName); c.EnableAnnotations(); }); services .AddLogging(Configuration) .AddPersistencePostgres(Configuration) .AddPersistenceRaven(Configuration) .AddAutoMapper(_assemblyApplication) .AddApplication(); services.AddTransient <ICurrentUserService, CurrentUserService>(); services.AddAutoMapper(_assemblyApplication); }