文件内容 Startup.cs 4 KB 4128 字符
using ExampleApeart.HttpApi.Host;
using ExampleApeart.HttpApi.Host.auditmodels;
using ExampleApeart.HttpApi.Host.Services;
using Scalar.AspNetCore;

namespace ExampleApeart
{
    /// <summary>
    /// 
    /// </summary>
    public class Startup
    {
        /// <summary>
        /// 
        /// </summary>
        private readonly IConfiguration _configuration;


        /// <summary>
        /// 
        /// </summary>
        /// <param name="configuration"></param>
        public Startup(IConfiguration configuration)
        {
            _configuration = configuration;
            //Console.WriteLine("---ExampleApeart.Startup.Constructor---");
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="services"></param>
        public void ConfigureServices(IServiceCollection services)
        {
            //Console.WriteLine("---ExampleApeart.Startup.ConfigureServices---");



            //读取配置,载入配置等

            services.AddHttpContextAccessor();

            services.AddExampleApeartEntityFrameworkCoreModule(_configuration);
            services.AddExampleApeartHandlerModule(_configuration);
            services.AddExampleApeartApplicationModule(_configuration);
            services.AddExampleApeartHttpApiHostModule(_configuration);

            // 这会自动注册 ILoggerFactory 和 ILogger<T>
            services.AddLogging();

            //services.AddApplication<ExampleApeartHttpApiHostModule>();

            services.AddOpenApi("v1");
            services.AddOpenApi("v2");
            services.AddOpenApi("v3");
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="app"></param>
        /// <param name="env"></param>
        /// <param name="loggerFactory"></param>
        public void Configure(IApplicationBuilder app, IWebHostEnvironment env, ILoggerFactory loggerFactory)
        {
            //Console.WriteLine("---ExampleApeart.Startup.Configure---");
            app.UseHttpsRedirection();
            app.Use(async (context, next) =>
            {
                //if (context.Request.Path.StartsWithSegments("/scalar"))
                //{
                //    var _need_no_auth = true;
                //    if (context.Request.Cookies.ContainsKey(PublicString.TokenHeadName))
                //    {
                //        var token = context.Request.Cookies.TryGetValue(PublicString.TokenHeadName, out var cookie);
                //        if (!String.IsNullOrEmpty(cookie))
                //        {
                //            if (cookie.TokenCheck())
                //            {
                //                _need_no_auth = false;
                //            }
                //        }
                //    }
                //    if (_need_no_auth)
                //    {
                //        context.Response.StatusCode = 401;
                //        await context.Response.WriteAsync("Unauthorized");
                //        return;
                //    }
                //}
                await next();
            });
            app.UseStaticFiles();
            app.UseDefaultFiles();
            //app.UseRateLimiter();
            app.UseRouting();
            app.UseMiddleware<AuthMiddleware>();
            app.UseMiddleware<AuditMiddleware>();
            //读写分离
            //app.UseMiddleware<DbReadonlyMiddleware>();
            app.UseCors(ExampleApeartHttpApiHostModule.DefaultCorsPolicyName);
            app.UseResponseCaching();

            app.UseEndpoints(options =>
            {

                options.MapScalarApiReference(opa =>
                {
                    opa.AddDocument("v1", "API V1", "/openapi/v1.json");
                    opa.AddDocument("v2", "API V2", "/openapi/v2.json");
                    opa.AddDocument("v3", "API V3", "/openapi/v3.json");
                });
                options.MapOpenApi();
                options.MapControllers();
            });

            //app.UseConfiguredEndpoints();
            Console.WriteLine($"{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")} 系统启动完成!");
        }
    }

}
​ ​