Day6 ASP.NET Core API 2

29619 ワード

1. Program.cs

using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace TodoApi
{
    public class Program
    {
        public static void Main(string[] args)
        {
            CreateHostBuilder(args).Build().Run();
        }

        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>();
                });
    }
}

1) Host.CreateDefaultBuilder (args)

  • GetCurrentDirectoryを使用して、プロジェクトのルートパスを設定します.
  • DOTNETのプリセット環境変数.
  • appsettings.jsonとappsettings.[properties/launchSettings.jsonでEnvironmentNameの名前を設定]jsonから設定をロードします.
  • launchSettings.jsonのEnvironmentNameが「Develpment」の場合、User Secretsが呼び出されます.
  • コンソールログ、デバッグ、およびイベントソースの出力を設定します.
  • 2) ConfigureWebHostDefaults (this IHostBuilder builder, Action configure);

  • アプリケーション's構成プロバイダを使用してkestrelサーバを構成し、kestrel webサーバを使用します.
    (kestrel = cross-platform managed HTTP server-based.
    このサーバーはASPです.NET Core AppをWindows以外のオペレーティングシステム環境で動作させる)
  • ASPNEtCOREの準備変数
  • の開発中に参照する他のRapperのサービスおよびミドルウェアを構成およびロードします.
  • 3) UseStartup (this IWebHostBuilder hostBuilder)

  • web host用のstartタイプを指定します.
  • TStartup=startupメソッドを含むタイプ
  • hostBuilder=Microsoftは、優先パラメータに使用されます.AspNetCore.Hosting.IWebHostBuilder
  • Main関数は、HostをCreateHostBuilderに任命し、Appとして実行します.
    CreateHostBuilderはまずHostCreateDefaultBuilderを使用して、上記の5つの操作を行います.
    この成果物は、UseStartupを使用して実行します.csファイルでタイプを指定します.
    この値に基づいて、ConfigureWebHostDefaultsは上記の3つのロールを実行し、Host buildタスクを完了します.

    2. Startup.cs

    using Microsoft.AspNetCore.Builder;
    using Microsoft.AspNetCore.Hosting;
    using Microsoft.Extensions.Configuration;
    using Microsoft.Extensions.DependencyInjection;
    using Microsoft.Extensions.Hosting;
    using Microsoft.EntityFrameworkCore;
    using TodoApi.Models;
    
    namespace TodoApi
    {
        public class Startup
        {
            public Startup(IConfiguration configuration)
            {
                Configuration = configuration;
            }
    
            public IConfiguration Configuration { get; }
    
            public void ConfigureServices(IServiceCollection services)
            {
                services.AddDbContext<TodoContext>(opt => opt.UseInMemoryDatabase("TodoList"));
                services.AddControllers();
            }
    
            public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
            {
                if (env.IsDevelopment())
                {
                    app.UseDeveloperExceptionPage();
                  
                }
    
                app.UseHttpsRedirection();
    
                app.UseRouting();
    
                app.UseAuthorization();
    
                app.UseEndpoints(endpoints =>
                {
                    endpoints.MapControllers();
                });
            }
        }
    }
    

    1) ConfigureServices (IServiceCollection services)

  • appサービスの一部を設定します.
  • これはあってもなくてもいい選択です.
  • サービスセット内にある場合、任意のサービスを追加できます.
    (
    IServiceCollection =

  • ICollection< T >
    int Count { get; }
    bool IsReadOnly { get; }
    void Add(T item);
    void Clear();
    bool Contains(T item);
    bool Remove(T item);

  • IEnumerable< T > or IEnumerable
    IEnumerator< T > GetEnumerator();
    //or
    IEnumerator GetEnumerator();

  • IList< T >
    int IndexOf(T item);
    void Insert(int index, T item);
    void RemoveAt(int index);
    )
  • の下のコンフィギュレーションの前に、サービスを構成するために呼び出されます.
  • 2) Configure (IApplicationBuilder app, IWebHostEnvironment env)


  • appが異なるHTTPリクエスト(パイプライン)にどのように応答するかを設定します.
    -開発者例外ページ
     if (env.IsDevelopment())
      {
          app.UseDeveloperExceptionPage();
      }
    アプリケーションが開発環境で実行されている場合(この時点のみ!)、「開発者例外」ページの有効化
    通常、次のミドルウェアから例外をキャプチャするために前面に配置します.
    -TTPSリダイレクト
     app.UseHttpsRedirection();
    すべての要求はHTTPSを要求する
    すべてのHTTP要求をHTTPSにリダイレクトする
    -静的ファイル
    app.UseStaticFiles();
    wwrootフォルダにcss、js、libを追加するプロセス
    -ルーティング
     app.UseRouting();
    
      app.UseEndpoints(endpoints =>
      {
          endpoints.MapGet("/", async context =>
          {
              await context.Response.WriteAsync("Hello World!");
          });
      });
    UseRouting=定義されたendPointセットをチェックし、要求に応じて最も一致するアイテムを選択します.
    UseEndpoints=endPointで実行します.選択したendPointに関連付けられた
  • < Convention Routing vs Attribute Routing >
    # convention
    app.UseMvc(routes =>
    {
        routes.MapRoute(
            name: "default",
            template: "{controller=Author}/{action=GetAuthors}/{id?}");
    });
    # attribute
    public class AuthorController : Controller
    {
        [Route("")]
        [Route("Home")]
        [Route("Home/Index")]
        public IActionResult Index()
        {
            return View();
        }
         [Route("Home/GetAuthor/{id:int}")]
        public IActionResult GetAuthor(int id)
        {
            ViewBag.Id = id;
            return View();
        }
    }
    構成
  • ミドルウェア
  • Startupなしでサービス
  • を構成
    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<ILoggerFactory>();
                        var logger = loggerFactory.CreateLogger<Program>();
                        var env = app.ApplicationServices.GetRequiredService<IWebHostEnvironment>();
                        var config = app.ApplicationServices.GetRequiredService<IConfiguration>();
    
                        logger.LogInformation("Logged in Configure");
    
                        if (env.IsDevelopment())
                        {
                            app.UseDeveloperExceptionPage();
                        }
                        else
                        {
                            app.UseExceptionHandler("/Home/Error");
                            app.UseHsts();
                        }
    
                        var configValue = config["MyConfigKey"];
                    });
                });
            });
    }