[ASP.NET Core開発実戦]基礎編01 Startup

5786 ワード

Startupは、その名の通り、ASPを構成するための起動クラスです.NET Coreアプリケーションのサービスとリクエストパイプ.
Startupには2つの主要な役割があります.
  • アプリケーションのサービスは、コンフィギュレーションサービスによって構成される.サービスは、アプリケーション機能を提供する再利用可能なコンポーネントです.
  • アプリケーションの要求処理パイプ(ミドルウェア)をコンフィギュレーション方法によって構成する.
  • 以下はVS通過ASP.NET Coreプロジェクトテンプレートで生成されたStartupクラス.
    public class Startup
    {
        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }
    
        public IConfiguration Configuration { get; }
    
        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddRazorPages();
        }
    
        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            else
            {
                app.UseExceptionHandler("/Error");
                // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
                app.UseHsts();
            }
    
            app.UseHttpsRedirection();
            app.UseStaticFiles();
    
            app.UseRouting();
    
            app.UseAuthorization();
    
            app.UseEndpoints(endpoints =>
            {
                endpoints.MapRazorPages();
            });
        }
    }
    

    ConfigureServicesメソッド


    ConfigureServicesメソッド:
  • オプション.
  • は、コンフィギュレーション・メソッドがアプリケーション・サービスを構成する前に、ホストによって呼び出される.
  • では、構成オプションが一般的に設定されています.
  • IServiceCollectionには、AddDbContext、AddDefaultIdentityなどのAdd{Services}形式で命名されたサービス拡張方法がたくさんあります.したがって,サービスをカスタマイズする際にも拡張メソッドをAdd{Services}で定義することが一般的である.
    public class Startup
    {
        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }
    
        public IConfiguration Configuration { get; }
    
        public void ConfigureServices(IServiceCollection services)
        {
    
            services.AddDbContext(options =>
                options.UseSqlServer(
                    Configuration.GetConnectionString("DefaultConnection")));
            services.AddDefaultIdentity(
                options => options.SignIn.RequireConfirmedAccount = true)
                .AddEntityFrameworkStores();
    
            services.AddRazorPages();
        }
    

    Configureメソッド


    Configureメソッドは、アプリケーションがHTTPリクエストに応答する方法を指定するために使用されます.中間部品コンポーネントをIApplicationBuilderインスタンスに追加することで、要求パイプを構成できます.
    ASP.NET Coreに内蔵されている配管は次のとおりです.
  • 開発者異常ページ
  • 異常処理プログラム
  • HTTP厳格伝送セキュリティ(HSTS)
  • HTTPSリダイレクト
  • ASP.NET Core MVCとRazor Pages
  • public class Startup
    {
        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }
    
        public IConfiguration Configuration { get; }
    
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddRazorPages();
        }
    
        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            else
            {
                app.UseExceptionHandler("/Error");
                app.UseHsts();
            }
    
            app.UseHttpsRedirection();
            app.UseStaticFiles();
    
            app.UseRouting();
    
            app.UseAuthorization();
    
            app.UseEndpoints(endpoints =>
            {
                endpoints.MapRazorPages();
            });
        }
    }
    
    各Use拡張メソッドは、1つまたは複数のミドルウェアコンポーネントを要求パイプに追加します.したがって、カスタムミドルウェアコンポーネントもUseによって拡張メソッドを定義します.
    要求パイプ内の各ミドルウェアコンポーネントは、パイプ内の次のコンポーネントを呼び出すか、適切な場合にチェーンを短絡させる責任を負います.したがって、ミドルウェアを登録するときは、呼び出し順序に注意してください.そうしないと、意図的に予想外の状況が発生します.
    IApplicationBuilderとミドルウェアの処理手順の詳細については、ASP.を参照してください.NET Coreミドルウェア.

    Startupを使用せずにサービスを構成


    Startupクラス構成サービスを使用しない場合は、ホストインスタンスの作成時にConfigureServicesメソッドとConfigureメソッドを呼び出す必要があります.次のようになります.
    public class Program
    {
        public static void Main(string[] args)
        {
            CreateHostBuilder(args).Build().Run();
        }
    
        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureAppConfiguration((hostingContext, config) =>
                {
                })
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.ConfigureServices(services =>
                    {
                        services.AddControllersWithViews();
                    })
                    .Configure(app =>
                    {
                        var loggerFactory = app.ApplicationServices
                            .GetRequiredService();
                        var logger = loggerFactory.CreateLogger();
                        var env = app.ApplicationServices.GetRequiredService();
                        var config = app.ApplicationServices.GetRequiredService();
    
                        logger.LogInformation("Logged in Configure");
    
                        if (env.IsDevelopment())
                        {
                            app.UseDeveloperExceptionPage();
                        }
                        else
                        {
                            app.UseExceptionHandler("/Home/Error");
                            app.UseHsts();
                        }
    
                        var configValue = config["MyConfigKey"];
                    });
                });
            });
    }