/// <summary> /// 注册MVC服务 /// </summary> /// <param name="services"></param> private void AddMvc(IServiceCollection services) { IMvcBuilder mvcBuilder = services.AddMvc(); mvcBuilder.AddMvcOptions(options => { options.Filters.AddService(typeof(HandlerExceptionFilter)); }); foreach (var module in ExtensionManager.Modules) { // Register controller from modules mvcBuilder.AddApplicationPart(module.Assembly); } mvcBuilder.AddRazorOptions( o => { foreach (Assembly assembly in ExtensionManager.Assemblies) { o.FileProviders.Add(new EmbeddedFileProvider(assembly, assembly.GetName().Name)); } foreach (var module in ExtensionManager.Modules) { o.AdditionalCompilationReferences.Add(MetadataReference.CreateFromFile(module.Assembly.Location)); } } ).AddViewLocalization() .AddDataAnnotationsLocalization(); foreach (Action <IMvcBuilder> prioritizedAddMvcAction in this.GetPrioritizedAddMvcActions()) { this.logger.LogInformation("Executing prioritized AddMvc action '{0}' of {1}", this.GetActionMethodInfo(prioritizedAddMvcAction)); prioritizedAddMvcAction(mvcBuilder); } //Csv var csvFormatterOptions = new CsvFormatterOptions(); mvcBuilder.AddMvcOptions(options => { options.InputFormatters.Add(new CsvInputFormatter(csvFormatterOptions)); options.OutputFormatters.Add(new CsvOutputFormatter(csvFormatterOptions)); options.FormatterMappings.SetMediaTypeMappingForFormat("csv", MediaTypeHeaderValue.Parse("text/csv")); options.RespectBrowserAcceptHeader = true; options.InputFormatters.Add(new XmlSerializerInputFormatter()); options.OutputFormatters.Add(new XmlSerializerOutputFormatter()); }); // Force Camel Case to JSON mvcBuilder.AddJsonOptions(opts => { opts.SerializerSettings.ContractResolver = new BaseContractResolver(); opts.SerializerSettings.DateTimeZoneHandling = DateTimeZoneHandling.Utc; opts.SerializerSettings.NullValueHandling = NullValueHandling.Ignore; opts.SerializerSettings.Converters.Add(new TimeSpanConverter()); opts.SerializerSettings.Converters.Add(new GuidConverter()); opts.SerializerSettings.Formatting = Formatting.None; }); //注册模块FluentValidation验证 foreach (ModuleInfo moduleInfo in ExtensionManager.Modules) { mvcBuilder.AddFluentValidation(fv => fv.RegisterValidatorsFromAssembly(moduleInfo.Assembly)); } }
// This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { var csvFormatterOptions = new CsvFormatterOptions(); services.Configure <Settings>(Configuration); services.AddOptions(); var appConfig = Configuration.GetSection("Settings").Get <Settings>(); services.AddSingleton <IHttpContextAccessor, HttpContextAccessor>(); string connection = Configuration["ConnectionStrings:DefaultConnection"].ToString(); services.AddDbContext <SmartContext>(opt => opt.UseSqlServer(connection)); services.AddIdentity <ApplicationUser, IdentityRole>(options => { options.Cookies.ApplicationCookie.ExpireTimeSpan = TimeSpan.FromHours(8); options.Cookies.ApplicationCookie.AccessDeniedPath = "/home/access-denied"; options.SignIn.RequireConfirmedEmail = true; }).AddEntityFrameworkStores <SmartContext>().AddDefaultTokenProviders(); services.AddScoped(typeof(IRepository <>), typeof(Repository <>)); services.AddScoped(typeof(IServices <>), typeof(Services <>)); services.AddScoped <IUser, User>(); //services.AddScoped<IBusinessEntityService, BusinessEntityService>(); //services.AddScoped<IUserSettingService, UserSettingService>(); //services.AddScoped<IUserBusinessEntityService, UserBusinessEntityService>(); services.AddLocalization(options => { options.ResourcesPath = "Resources"; }); services.Configure <RequestLocalizationOptions>(options => { var supportedCultures = new[] { new CultureInfo("en-US"), new CultureInfo("pt-BR") }; options.DefaultRequestCulture = new RequestCulture(culture: "pt-BR", uiCulture: "pt-BR"); options.SupportedCultures = supportedCultures; options.SupportedUICultures = supportedCultures; //options.RequestCultureProviders.Insert(0, new CustomRequestCultureProvider(async A => { return new ProviderCultureResult("en"); })); }); services.AddMvc(options => { // options.SslPort = 44368; // options.Filters.Add(new RequireHttpsAttribute()); options.InputFormatters.Add(new CsvInputFormatter(csvFormatterOptions)); options.OutputFormatters.Add(new CsvOutputFormatter(csvFormatterOptions)); options.FormatterMappings.SetMediaTypeMappingForFormat("csv", MediaTypeHeaderValue.Parse("text/csv")); }).AddViewLocalization(LanguageViewLocationExpanderFormat.Suffix, opts => { opts.ResourcesPath = "Resources"; }) .AddDataAnnotationsLocalization(); services.AddAutoMapper(); services.AddAuthorization(options => { options.AddPolicy("CanManageTask", policy => policy.Requirements.Add(new ClaimRequirement("Task", "Write"))); }); services.AddDistributedMemoryCache(); // Adds a default in-memory implementation of IDistributedCache services.AddSession(options => { // Set a short timeout for easy testing. options.IdleTimeout = TimeSpan.FromHours(8); options.CookieHttpOnly = true; }); //services.AddSingleton<ITempDataProvider, CookieTempDataProvider>(); // Add application services. services.AddTransient <IEmailSender, AuthMessageSender>(); services.AddTransient <ISmsSender, AuthMessageSender>(); services.Configure <AuthMessageSenderOptions>(opt => { opt.SendGridKey = Configuration["AuthMessageSender:SendGridKey"].ToString(); opt.SendGridUser = Configuration["AuthMessageSender:SendGridUser"].ToString(); }); }
// This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { services.AddDbContext <FrotaAppDbContext>(options => options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection"))); // jwt wire up services.AddSingleton <IJwtFactory, JwtFactory>(); // 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 = false, ClockSkew = TimeSpan.Zero }; services.AddAuthentication().AddJwtBearer(options => { options.SaveToken = true; options.TokenValidationParameters = tokenValidationParameters; }); // api user claim policy services.AddAuthorization(options => { options.AddPolicy("ApiUser", policy => policy.RequireClaim(Constants.Strings.JwtClaimIdentifiers.Rol, Constants.Strings.JwtClaims.ApiAccess)); }); services.AddIdentity <Login, IdentityRole> (o => { // configure identity options o.Password.RequireDigit = false; o.Password.RequireLowercase = false; o.Password.RequireUppercase = false; o.Password.RequireNonAlphanumeric = false; o.Password.RequiredLength = 6; }) .AddEntityFrameworkStores <FrotaAppDbContext>() .AddDefaultTokenProviders(); var csvFormatterOptions = new CsvFormatterOptions(); csvFormatterOptions.CsvDelimiter = "|"; services.AddMvc(options => { options.OutputFormatters.Add(new CsvOutputFormatter(csvFormatterOptions)); options.FormatterMappings.SetMediaTypeMappingForFormat("csv", MediaTypeHeaderValue.Parse("text/csv")); }).AddFluentValidation(fv => fv.RegisterValidatorsFromAssemblyContaining <Startup>()); services.AddAutoMapper(); }
public void ConfigureServices(IServiceCollection services) { // IoC para autoMapper services.AddAutoMapper(); // Obtendo parametros AuthorizationConfigs do appsettings.json services.Configure <AuthorizationConfigs>(Configuration.GetSection("AuthorizationConfigs")); // Configuração da internacionalização services.AddJsonLocalization(options => options.ResourcesPath = "Internationalization"); WRIoC.Register(services); services.AddSingleton <IConfiguration>(Configuration); services.AddScoped <IUsuarioBase, UsuarioBase>(); services.AddDbContext <WRContext>(options => options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")) .ConfigureWarnings(x => x.Ignore(RelationalEventId.AmbientTransactionWarning))); // Configurando ServiceLocator ServiceLocator.Init(services.BuildServiceProvider()); // Configuração AddIdentityServer services.AddIdentityServer() .AddSigningCredential(AuthorizationConfig.GetCertificate()) .AddInMemoryApiResources(AuthorizationConfig.GetApiResources()) .AddInMemoryClients(AuthorizationConfig.GetClients()) .AddResourceOwnerValidator <GrantValidator>(); JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Clear(); // Configuração Client services.AddAuthentication(IdentityServerAuthenticationDefaults.AuthenticationScheme) .AddIdentityServerAuthentication(options => AuthorizationConfig.GetServerAutentication(options)); CorsAuthorization.SetAllowAll(services); services.AddCors(options => { options.AddPolicy("ALL", builder => builder .AllowAnyOrigin() .AllowAnyHeader() .AllowAnyMethod() .AllowCredentials()); }); services.AddMvcCore().AddAuthorization(); var csvFormatterOptions = new CsvFormatterOptions(); services.AddMvc(options => { options.Filters.Add(typeof(DomainExceptionFilter)); options.ModelBinderProviders.Insert(0, new ProviderModelBinder()); options.RespectBrowserAcceptHeader = true; options.InputFormatters.Add(new CsvInputFormatter(csvFormatterOptions)); options.OutputFormatters.Add(new CsvOutputFormatter(csvFormatterOptions)); options.FormatterMappings.SetMediaTypeMappingForFormat("csv", "text/csv"); }) .AddCsvSerializerFormatters() .AddViewLocalization() .AddJsonOptions(x => SetDefaultSerializerSettings(x.SerializerSettings)) .AddApplicationPart(typeof(Startup).Assembly); }