Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C# ASP.NET Core 라우팅 완벽 가이드: 개념부터 URL 매칭과 생성까지

라우팅(Routing)은 들어오는 HTTP 요청을 적절한 경로 처리기(Route Handler)에 매핑하는 데 사용되는 핵심 메커니즘입니다.

라우트는 애플리케이션이 시작될 때 구성되며, 요청 처리 과정에서 사용할 수 있는 값들을 URL로부터 추출할 수 있습니다.

라우팅의 기본 개념

라우팅은 IRouter 인터페이스의 구현체인 라우트(Route)를 사용하여 다음 두 가지 작업을 수행합니다.

  • 들어오는 요청을 경로 처리기에 매핑
  • 응답에 사용될 URL 생성

라우팅은 RouterMiddleware 클래스를 통해 미들웨어 파이프라인에 연결됩니다. ASP.NET MVC는 자체 구성 과정의 일부로 라우팅을 미들웨어 파이프라인에 추가합니다.

URL 매칭(URL Matching)

들어오는 요청은 먼저 RouterMiddleware로 진입하며, 이 미들웨어는 등록된 각 라우트에 대해 순서대로 RouteAsync 메서드를 호출합니다.

IRouter 인스턴스는 RouteContext의 Handler 속성을 null이 아닌 RequestDelegate로 설정함으로써 해당 요청을 처리할지 여부를 결정합니다.

만약 어떤 라우트가 핸들러를 설정했다면, 그 핸들러가 호출되어 요청을 처리하고 이후의 라우트는 더 이상 평가되지 않습니다.

반대로 모든 라우트가 실행된 후에도 요청을 처리할 핸들러를 찾지 못하면, 미들웨어는 next를 호출하여 요청 파이프라인의 다음 미들웨어로 제어를 넘깁니다.

URL 생성(URL Generation)

URL 생성 역시 유사한 반복 프로세스를 따르지만, 시작점이 다릅니다. 사용자 코드나 프레임워크 코드가 라우트 컬렉션의 GetVirtualPath 메서드를 호출하는 것에서 시작됩니다.

그러면 각 라우트의 GetVirtualPath 메서드가 순차적으로 호출되며, null이 아닌 VirtualPathData가 반환될 때까지 이 과정이 반복됩니다.

라우트 만들기

라우팅 시스템은 IRouter의 표준 구현으로 Route 클래스를 제공합니다. Route 클래스는 라우트 템플릿 문법을 사용하여 RouteAsync가 호출될 때 URL 경로와 비교할 패턴을 정의합니다.

또한 동일한 라우트 템플릿이 GetVirtualPath가 호출될 때 URL을 생성하는 데에도 사용됩니다.

예제

routes.MapRoute(name: "default", template: "{controller=Home}/{action=Index}/{id?}");

위 예제에서 {controller=Home}과 같이 기본값을 지정할 수 있으며, {id?}처럼 물음표를 붙여 선택적(optional) 매개변수로 정의할 수도 있습니다.

라우트 생성용 확장 메서드

프레임워크는 라우트를 손쉽게 생성할 수 있도록 다음과 같은 확장 메서드들을 제공합니다.

MapRoute
MapGet
MapPost
MapPut
MapDelete
MapVerb

각 메서드는 HTTP 동사(GET, POST, PUT, DELETE 등)에 맞는 요청만 처리하도록 제한할 수 있어, RESTful API 설계에 유용하게 활용됩니다.