다음을 통해 공유


앱 시작

팁 (조언)

이 콘텐츠는 .NET Docs 또는 오프라인으로 읽을 수 있는 다운로드 가능한 무료 PDF로 제공되는 Azure용 ASP NET Web Forms 개발자용 Blazor 전자책에서 발췌한 내용입니다.

Blazor-for-ASP-NET-Web-Forms-Developers eBook 커버 썸네일.

ASP.NET 위해 작성된 애플리케이션에는 global.asax.cs 일반적으로 HTML 렌더링 및 .NET 처리에 대해 구성되고 사용할 수 있는 서비스를 제어하는 이벤트를 정의하는 Application_Start 파일이 있습니다. 이 장에서는 ASP.NET Core 및 Blazor Server와 상황이 약간 다른지 살펴봅합니다.

Application_Start 및 웹 양식

기본 웹 양식 Application_Start 메서드는 여러 구성 작업을 처리하기 위해 수년간 의도적으로 확장되었습니다. Visual Studio에서 기본 템플릿을 사용하는 새 웹 양식 프로젝트에는 다음 구성 논리가 포함됩니다.

  • RouteConfig - 애플리케이션 URL 라우팅
  • BundleConfig - CSS 및 JavaScript 번들링 및 축소

이러한 각 개별 파일은 폴더에 App_Start 있으며 애플리케이션 시작 시 한 번만 실행됩니다. RouteConfig 기본 프로젝트 템플릿에서 애플리케이션 URL이 FriendlyUrlSettings 파일 확장자를 생략할 수 있도록 웹 양식용 .ASPX 을 추가합니다. 기본 템플릿에는 페이지에 대한 .ASPX 영구 HTTP 리디렉션 상태 코드(HTTP 301)를 확장명을 생략하는 파일 이름으로 친숙한 URL에 제공하는 지시문도 포함되어 있습니다.

ASP.NET Core 및 Blazor를 사용하면 이러한 메서드가 간소화되고 클래스로 Startup 통합되거나 일반적인 웹 기술에 유리하게 제거됩니다.

Blazor Server 시작 구조

Blazor Server 애플리케이션은 ASP.NET Core 3.0 이상 버전 위에 있습니다. ASP.NET Core 웹 애플리케이션은 Program.cs 또는 클래스의 메서드 Startup.cs 쌍을 통해 구성됩니다. 샘플 Program.cs 파일은 다음과 같습니다.

using BlazorApp1.Data;
using Microsoft.AspNetCore.Components;
using Microsoft.AspNetCore.Components.Web;

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddRazorPages();
builder.Services.AddServerSideBlazor();
builder.Services.AddSingleton<WeatherForecastService>();

var app = builder.Build();

// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
    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.MapBlazorHub();
app.MapFallbackToPage("/_Host");

app.Run();

앱의 필수 서비스는 인스턴스의 WebApplicationBuilder 컬렉션에 Services 추가됩니다. 이는 프레임워크의 기본 제공 종속성 주입 컨테이너를 사용하여 다양한 ASP.NET Core 프레임워크 서비스를 구성하는 방법입니다. 다양한 builder.Services.Add* 메서드는 인증, Razor 페이지, MVC 컨트롤러 라우팅, SignalR 및 Blazor Server 상호 작용과 같은 기능을 사용하도록 설정하는 서비스를 추가합니다. ASPX, ASCX, ASHX 및 ASMX 파일의 구문 분석 및 처리가 web.config 구성 파일의 ASP.NET 참조하여 정의되었기 때문에 이 메서드는 웹 양식에서 필요하지 않았습니다. ASP.NET Core의 종속성 주입에 대한 자세한 내용은 온라인 설명서에서 확인할 수 있습니다.

appbuilder를 빌드한 후, 나머지 app 호출은 HTTP 파이프라인을 구성합니다. 이러한 호출을 통해 애플리케이션에 전송된 모든 요청을 처리할 미들웨어 를 위에서 아래로 선언합니다. 기본 구성에서 이러한 기능의 대부분은 웹 양식 구성 파일에 분산되어 있으며 이제 쉽게 참조할 수 있는 위치에 있습니다.

이제 사용자 지정 오류 페이지 설정은 더 이상 web.config 파일에 배치되지 않으며, 애플리케이션 환경이 Development로 레이블이 지정되지 않은 경우 항상 표시되도록 구성됩니다. 또한 ASP.NET Core 애플리케이션은 이제 메서드 호출을 사용하여 기본적으로 UseHttpsRedirection TLS로 보안 페이지를 제공하도록 구성됩니다.

다음으로 예기치 않은 구성 메서드 호출이 발생합니다 UseStaticFiles. ASP.NET Core에서는 정적 파일(예: JavaScript, CSS 및 이미지 파일)에 대한 요청을 명시적으로 사용하도록 설정해야 하며 앱의 wwwroot 폴더에 있는 파일만 기본적으로 공개적으로 주소 지정이 가능합니다.

다음 줄은 웹 양식 UseRouting에서 구성 옵션 중 하나를 복제하는 첫 번째 줄입니다. 이 메서드는 ASP.NET Core 라우터를 파이프라인에 추가하며 여기에서 또는 라우팅을 고려할 수 있는 개별 파일에서 구성할 수 있습니다. 라우팅 구성에 대한 자세한 내용은 라우팅 섹션에서 확인할 수 있습니다.

이 섹션의 마지막 app.Map* 호출은 ASP.NET Core가 수신 대기 중인 엔드포인트를 정의합니다. 이러한 경로는 웹 서버에서 액세스하고 .NET에서 처리하여 사용자에게 반환되는 일부 콘텐츠를 받을 수 있는 웹 액세스 가능한 위치입니다. 첫 번째 항목은 MapBlazorHub Blazor 구성 요소의 상태 및 렌더링이 처리되는 서버에 대한 실시간 및 영구 연결을 제공하는 데 사용할 SignalR 허브를 구성합니다. 메서드 호출은 MapFallbackToPage Blazor 애플리케이션을 시작하고 클라이언트 쪽에서 딥 링크 요청을 처리하도록 애플리케이션을 구성하는 페이지의 웹 액세스 가능 위치를 나타냅니다. 브라우저를 열고 기본 프로젝트 템플릿과 같이 애플리케이션에서 Blazor 처리 경로로 /counter 직접 이동하는 경우 이 기능이 작동합니다. 요청은 _Host.cshtml 대체 페이지에서 처리된 다음 Blazor 라우터를 실행하고 카운터 페이지를 렌더링합니다.

애플리케이션을 시작하는 것은 가장 마지막 줄에서 이루어지며, 이는 웹 양식에서는 필요하지 않았습니다(IIS가 실행되도록 의존했기 때문입니다).

BundleConfig 프로세스 업그레이드

CSS 스타일시트 및 JavaScript 파일과 같은 자산을 묶는 기술은 크게 변경되었으며, 다른 기술은 이러한 리소스를 관리하기 위해 빠르게 진화하는 도구와 기술을 제공합니다. 이를 위해 Grunt/Gulp/WebPack과 같은 노드 명령줄 도구를 사용하여 정적 자산을 패키지하는 것이 좋습니다.

Grunt, Gulp 및 WebPack 명령줄 도구 및 관련 구성을 애플리케이션에 추가할 수 있으며 ASP.NET Core는 애플리케이션 빌드 프로세스 중에 해당 파일을 조용히 무시합니다. 프로젝트 파일 내부에 특정 구문을 추가하여 Target를 구현하고 gulp 스크립트 및 해당 스크립트 내의 min 목표를 트리거하여 태스크를 실행하는 호출을 추가할 수 있습니다.

<Target Name="MyPreCompileTarget" BeforeTargets="Build">
  <Exec Command="gulp min" />
</Target>

CSS 및 JavaScript 파일을 관리하는 두 전략에 대한 자세한 내용은 번들에서 사용할 수 있으며 ASP.NET Core 설명서의 정적 자산을 축소할 수 있습니다.