예제 #1
0
        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);
        }