/// <summary> /// Configures the services. /// </summary> /// <param name="services">The services.</param> public void ConfigureServices(IServiceCollection services) { ConfigurationOptions.ConfigureService(services, Configuration); // Add framework services. services.AddMvc( options => { options.Filters.Add(typeof(ValidateModelStateAttribute)); }); // Remove commented code and above semicolon // if the assembly of the API Controllers is different than project which contains Startup class //.AddApplicationPart(typeof(BaseController<>).Assembly); // Localization support LocalizationConfiguration.ConfigureService(services); Mapper.Reset(); // https://github.com/AutoMapper/AutoMapper.Extensions.Microsoft.DependencyInjection/issues/28 services.AddAutoMapper(typeof(Startup)); // Swagger API documentation SwaggerConfiguration.ConfigureService(services); // IOC containers / Entity Framework EntityFrameworkConfiguration.ConfigureService(services, Configuration); IocContainerConfiguration.ConfigureService(services, Configuration); ApiVersioningConfiguration.ConfigureService(services); }
public void ConfigureServices(IServiceCollection services) { ConfigurationOptions.ConfigureService(services, Configuration); services.AddMvc( options => { options.Filters.Add(typeof(ValidateModelStateAttribute)); }); Mapper.Reset(); services.AddAutoMapper(typeof(Startup)); // Swagger API documentation SwaggerConfiguration.ConfigureService(services); EntityFrameworkConfiguration.ConfigureService(services, Configuration); IocContainerConfiguration.ConfigureService(services, Configuration); ApiVersioningConfiguration.ConfigureService(services); services.AddAuthentication(options => { options.DefaultAuthenticateScheme = "JwtBearer"; options.DefaultChallengeScheme = "JwtBearer"; }) .AddJwtBearer("JwtBearer", jwtBearerOptions => { jwtBearerOptions.TokenValidationParameters = new TokenValidationParameters { ValidateIssuerSigningKey = true, IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Constants.SymmetricSecurityKey)), ValidateIssuer = false, ValidateAudience = false, ValidateLifetime = true, //validate the expiration and not before values in the token ClockSkew = TimeSpan.FromMinutes(5) //5 minute tolerance for the expiration date }; jwtBearerOptions.Events = new JwtBearerEvents { OnTokenValidated = context => { var slug = context.HttpContext.Request.Headers[Constants.TenantId].ToString(); if (context.SecurityToken is JwtSecurityToken accessToken && !string.IsNullOrWhiteSpace(slug)) { if (accessToken.Claims.Where(claim => claim.Type.Equals(ClaimTypes.PrimaryGroupSid)).Any(claim => slug == claim.Value)) { return(Task.CompletedTask); } } context.Fail($"Invalid 'slug'"); return(Task.CompletedTask); } }; });
/// <summary> /// This method gets called by the runtime. Use this method to add services to the container. /// </summary> public void ConfigureServices(IServiceCollection services) { ApiVersioningConfiguration.ConfigureService(services); services.AddMvc(); LoadAppSettings.IntoInjector(services, Configuration); DependencyInjectorHost.Configure(services); // Swagger SwaggerStartupConfiguration.ConfigureService(services, environment); }
/// <summary> /// Configures the services. /// </summary> /// <param name="services">The services.</param> public void ConfigureServices(IServiceCollection services) { ConfigurationOptions.ConfigureService(services, Configuration); // Add framework services. services.AddMvc(); services.AddAutoMapper(); // Swagger API documentation SwaggerConfiguration.ConfigureService(services); // IOC containers / Entity Framework EntityFrameworkConfiguration.ConfigureService(services, Configuration); IocContainerConfiguration.ConfigureService(services, Configuration); ApiVersioningConfiguration.ConfigureService(services); }
/// <summary> /// This method gets called by the runtime. Use this method to add services to the container. /// </summary> public void ConfigureServices(IServiceCollection services) { //services.AddHttpClient(); services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2); ApiVersioningConfiguration.ConfigureService(services); services.AddMvc(); services.AddHttpClient(); LoadAppSettings.IntoInjector(services, Configuration); DependencyInjectorHost.Configure(services); // Swagger SwaggerStartupConfiguration.ConfigureService(services, environment); }
// This method gets called by the runtime. Use this method to add services to the container. public IServiceProvider ConfigureServices(IServiceCollection services) { // Add framework services. services.AddDbContext <ApplicationDbContext>(options => options.UseSqlServer(Configuration.GetConnectionString("Default"), b => b.MigrationsAssembly("Web.Api.Infrastructure"))); // jwt wire up // Get options from app settings var jwtAppSettingOptions = Configuration.GetSection(nameof(JwtIssuerOptions)); // Configure JwtIssuerOptions services.Configure <JwtIssuerOptions>(options => { options.Issuer = jwtAppSettingOptions[nameof(JwtIssuerOptions.Issuer)]; options.Audience = jwtAppSettingOptions[nameof(JwtIssuerOptions.Audience)]; options.SigningCredentials = new SigningCredentials(_signingKey, SecurityAlgorithms.HmacSha256); }); var tokenValidationParameters = new TokenValidationParameters { ValidateIssuer = true, ValidIssuer = jwtAppSettingOptions[nameof(JwtIssuerOptions.Issuer)], ValidateAudience = true, ValidAudience = jwtAppSettingOptions[nameof(JwtIssuerOptions.Audience)], ValidateIssuerSigningKey = true, IssuerSigningKey = _signingKey, RequireExpirationTime = false, ValidateLifetime = true, ClockSkew = TimeSpan.Zero }; services.AddAuthentication(options => { options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme; options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme; }).AddJwtBearer(configureOptions => { configureOptions.ClaimsIssuer = jwtAppSettingOptions[nameof(JwtIssuerOptions.Issuer)]; configureOptions.TokenValidationParameters = tokenValidationParameters; configureOptions.SaveToken = true; }); // add identity var identityBuilder = services.AddIdentityCore <AppUser>(o => { // configure identity options o.Password.RequireDigit = false; o.Password.RequireLowercase = false; o.Password.RequireUppercase = false; o.Password.RequireNonAlphanumeric = false; o.Password.RequiredLength = 6; }); identityBuilder = new IdentityBuilder(identityBuilder.UserType, typeof(IdentityRole), identityBuilder.Services); identityBuilder.AddEntityFrameworkStores <ApplicationDbContext>().AddDefaultTokenProviders(); services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2).AddFluentValidation(fv => fv.RegisterValidatorsFromAssemblyContaining <Startup>()); services.AddAutoMapper(); // Configure versions ApiVersioningConfiguration.ConfigureService(services); // Register the Swagger generator, defining 1 or more Swagger documents services.AddSwaggerGen(c => { c.SwaggerDoc("v1", new Info { Title = "SergeijoAPI", Version = "v1" }); // This call remove version from parameter, without it we will have version as parameter // for all endpoints in swagger UI c.OperationFilter <RemoveVersionFromParameter>(); // This make replacement of v{version:apiVersion} to real version of corresponding swagger doc. c.DocumentFilter <ReplaceVersionWithExactValueInPath>(); }); // Now register our services with Autofac container. var builder = new ContainerBuilder(); builder.RegisterModule(new CoreModule()); builder.RegisterModule(new InfrastructureModule()); // Presenters builder.RegisterType <AddUserPresenter>().SingleInstance(); builder.RegisterType <GetUsersPresenter>().SingleInstance(); builder.RegisterType <GetUserByIdPresenter>().SingleInstance(); builder.RegisterType <UpdateUserByIdPresenter>().SingleInstance(); builder.RegisterType <DeleteUserByIdPresenter>().SingleInstance(); builder.RegisterAssemblyTypes(Assembly.GetExecutingAssembly()).Where(t => t.Name.EndsWith("Presenter")).SingleInstance(); builder.Populate(services); var container = builder.Build(); // Create the IServiceProvider based on the container. return(new AutofacServiceProvider(container)); }
/// <summary> /// Configure API versioning /// </summary> /// <returns></returns> public static ApiVersioningConfiguration Configure(HttpConfiguration configuration) { return _Config ?? (_Config = new ApiVersioningConfiguration(configuration)); }