public virtual void ConfigureServices(IServiceCollection services) { services.AddHttpContextAccessor(); var diHelper = new DIHelper(services); if (AddControllers) { services.AddControllers() .AddXmlSerializerFormatters() .AddJsonOptions(options => { options.JsonSerializerOptions.WriteIndented = false; options.JsonSerializerOptions.IgnoreNullValues = true; options.JsonSerializerOptions.Converters.Add(new ApiDateTimeConverter()); if (Converters != null) { foreach (var c in Converters) { options.JsonSerializerOptions.Converters.Add(c); } } }); } diHelper .AddCultureMiddleware() .AddIpSecurityFilter() .AddPaymentFilter() .AddProductSecurityFilter() .AddTenantStatusFilter(); var builder = services.AddMvcCore(config => { var policy = new AuthorizationPolicyBuilder().RequireAuthenticatedUser().Build(); config.Filters.Add(new AuthorizeFilter(policy)); config.Filters.Add(new TypeFilterAttribute(typeof(TenantStatusFilter))); config.Filters.Add(new TypeFilterAttribute(typeof(PaymentFilter))); config.Filters.Add(new TypeFilterAttribute(typeof(IpSecurityFilter))); config.Filters.Add(new TypeFilterAttribute(typeof(ProductSecurityFilter))); config.Filters.Add(new CustomResponseFilterAttribute()); config.Filters.Add(new CustomExceptionFilterAttribute()); config.Filters.Add(new TypeFilterAttribute(typeof(FormatFilter))); config.OutputFormatters.RemoveType <XmlSerializerOutputFormatter>(); config.OutputFormatters.Add(new XmlOutputFormatter()); }); diHelper.AddCookieAuthHandler(); var authBuilder = services.AddAuthentication("cookie") .AddScheme <AuthenticationSchemeOptions, CookieAuthHandler>("cookie", a => { }); if (ConfirmAddScheme) { authBuilder.AddScheme <AuthenticationSchemeOptions, ConfirmAuthHandler>("confirm", a => { }); } if (LogParams != null) { diHelper.AddNLogManager(LogParams); } services.AddAutofac(Configuration, HostEnvironment.ContentRootPath); }