ASP.NET Core 개발을 시작할 때 기억하는 것 - 그 1-

12034 단어 ASP.NET_Core
QIITA를 자신의 개발 메모용으로 사용해 보겠습니다.

지금의 일에서는 당분간 .NET Framework에서 벗어나지 않기 때문에 ASP.NET Core는 그치지 않고 스스로 무언가 프로젝트 만들어 거기에 적당하게 앱을 메워 갈 예정입니다.
우선은 그 전에 공부하지 않으면 안되기 때문에 「ASP.Net Core를 개발할 때에 기억해 두지 않으면 안되는 것」을 전부 5개나 6개의 시리즈로 나누어 적어 갈 예정입니다.

Section 1. ASP.NET Core 프로젝트 정보



1. 프로젝트 생성 및 구성



먼저 빈 프로젝트를 만듭니다.



  • Visual Studio의 경우

    새 프로젝트 만들기 -> ASP.NET Core 웹 응용 프로그램 -> 빈 프로젝트

  • donet command
    dotnet new プロジェクトの種類 -o プロジェクト名
    (例 dotnet new web -o ANCEntry_EmptyApp)
    

  • 이것으로 할 수있는 것은 다음과 같습니다.


    【주요 파일의 설명】




    파일 이름
    내용


    appsettings.json
    애플리케이션 설정 정보 기재

    appsettingsDevelopment.json
    응용 프로그램의 개발 버전 설정을 설명합니다.

    Program.cs
    프로젝트 내에서 처음 실행되는 메인 프로그램

    Startup.cs
    어플리케이션의 기동 처리를 기술한 프로그램


    【프로그램 실행 방법】


  • dotnet command
  • dotnet run dotnet run -c Debug (デバッグモード) dotnet run -c Release (非デバッグモード)


  • 2.Program.cs 일정


    
    using Microsoft.AspNetCore.Hosting;
    using Microsoft.Extensions.Hosting;
    
    namespace ANCEntry_EmptyApp
    {
        public class Program
        {
            public static void Main(string[] args)
            {
                CreateHostBuilder(args).Build().Run();  // **[1] 
            }
    
            // **[2]
            public static IHostBuilder CreateHostBuilder(string[] args) =>
                Host.CreateDefaultBuilder(args)
                    .ConfigureWebHostDefaults(webBuilder =>
                    {
                        webBuilder.UseStartup<Startup>();
                    });
        }
    }
    

    【해설】


  • 통화 계층 구조: Main -> CreateHostBuilder

  • CreateHostBuilder: HostBuilder를 작성해 준다. HostBuilder=웹 서버(=호스트) 팩토리(또는 빌더)
  •     Host.CreateDefaultBuilder(args)
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseStartup<Startup>();
            });
    

  • CreateDefaultBuilder -> 기본 HostBuilder를 생성합니다.

  • ConfigureWebHostDefaults -> 기본 Host 구성을 생성합니다.

    설정 정보를 읽는 데 WebBuilder가 Startup 클래스를 사용합니다.
    즉, Startup 클래스를 사용해 설정 정보를 초기화한 Web 서버(=HostBuilder)를 돌려준다.
  • 이것을 Main이 호출하고, 반환된 HostBuilder를 Build하여 Host(=웹 서버)의 인스턴스를 생성해 Run(=실행)시킨다.


  • 3. Startup.cs 정보


    
    using Microsoft.AspNetCore.Builder;
    using Microsoft.AspNetCore.Hosting;
    using Microsoft.AspNetCore.Http;
    using Microsoft.Extensions.DependencyInjection;
    using Microsoft.Extensions.Hosting;
    
    namespace ANCEntry_EmptyWeb
    {
        public class Startup
        {
            public void ConfigureServices(IServiceCollection services)
            {
            }
    
             public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
            {
                if (env.IsDevelopment())
                {
                    app.UseDeveloperExceptionPage();
                }
    
                app.UseRouting();
    
                app.UseEndpoints(endpoints =>
                {
                    endpoints.MapGet("/", async context =>
                    {
                        context.Response.ContentType = "text/html";
                        await context.Response.WriteAsync("<html><head><title>Hello</title></head");
                        await context.Response.WriteAsync("  <body><h1>Hello World!</h1>");
                        await context.Response.WriteAsync("    <p>This is sample asp.net core page.</p>");
                        await context.Response.WriteAsync("</body></html>");
                    });
                });
            }
        }
    }
    

    【해설】



  • ConfigureServices -> 해당 응용 프로그램에서 사용할 서비스를 등록합니다.

    MVC 애플리케이션에서는 services.AddControllerWithView();가 구현되고, Razor 페이지 애플리케이션에서는 services.AddRazorPages();가 구현된다.
  • Configure -> 응용 프로그램에서 사용할 미들웨어를 등록합니다.



  • 인수
    설명


    IApplicationBuilder 앱
    HttpRequest를 받아들이고 Response를 돌려줄 때까지의 처리의 흐름(이것을 「파이프 라인」이라고 한다)을 돌려준다.

    IWebHostEnvironment env
    웹 애플리케이션 (= 호스트)의 실행 환경 설정을 수행하는 클래스


  • 개발 모드에서 예외 페이지 설정 if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); }
  • 라우팅 설정: app.UseRouting();

  • 엔드포인트 설정:

    엔드포인트 = 파이프라인의 맨 끝에 호출하는 처리.
  • 
        app.UseEndpoints(endpoints =>
        {
            endpoints.MapGet("/", async context =>
            {
                context.Response.ContentType = "text/html";
                await context.Response.WriteAsync("<htm><head><title>Hello</title></head");
                ・・・
    
  • endpoint.MapGet()
  • → 제 1 인수의 패스에 액세스하면 제 2 인수의 람다 식을 실행한다.
  • 사용 예
  • 
        app.UseEndpoints(endpoints =>
        {
        endpoints.MapGet("/view/{query}", async context =>
        {
            string paramstr = (string)context.GetRouteValue("query");
            await context.Response.WriteAsync("Hello ASP.NET Core World EndPoint!:"+paramstr);
        });
        });
    
    

    좋은 웹페이지 즐겨찾기