Razor Pages는 ASP.NET Core에서 사용하는 웹 개발 방식 중 하나로, 기존의 MVC(Model-View-Controller)와 달리 Page 기반의 개발 방식을 채택합니다. 다음과 같은 구조를 가집니다:
*.cshtml.cs): 컨트롤러 역할을 담당 (기능과 로직 처리)📌 MVC는
M + V + C, Razor Pages는M + V + VM(ViewModel)방식이라고 보면 됩니다.
MVC에서 사용하던 Controllers, Models 폴더는 제거합니다.
Pages 폴더 생성Pages/_ViewImports.cshtml 파일 추가@using HelloEmpty
@using HelloEmpty.Models
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
VS 2022 기준
Pages 폴더 우클릭 → 새 항목 추가 → Razor Page (비어 있음) 선택Index.cshtml과 Index.cshtml.cs가 생성됨using HelloEmpty.Models;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
namespace HelloEmpty.Pages
{
public class IndexModel : PageModel
{
[BindProperty]
public HelloMessage HelloMsg { get; set; }
public string Noti { get; set; }
public void OnGet()
{
HelloMsg = new HelloMessage()
{
Message = "Hello, Razor Pages!"
};
}
public void OnPost()
{
Noti = "Message Changed!";
}
}
}
OnGet()은 페이지 최초 진입 시 실행되고,OnPost()는 폼 제출 시 실행됩니다.
@page
@model HelloEmpty.Pages.IndexModel
<html>
<head>
<title>Hello Razor Pages!</title>
</head>
<body>
<h1>@Model.HelloMsg.Message</h1>
<hr />
<h2>@Model.Noti</h2>
<form method="post">
<label asp-for="HelloMsg.Message">Enter Message</label>
<br />
<input type="text" asp-for="HelloMsg.Message" />
<br />
<button type="submit">Submit</button>
</form>
</body>
</html>
Razor Pages에서는
asp-controller나asp-action이 필요 없습니다. Razor Page는 View와 Controller가 자동으로 1:1 매핑되기 때문입니다.
var builder = WebApplication.CreateBuilder(args);
// Razor Pages 등록
builder.Services.AddRazorPages();
var app = builder.Build();
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
// Razor Pages 매핑
app.MapRazorPages();
app.Run();
MVC와 달리
MapControllerRoute를 사용하지 않고MapRazorPages()로 경로를 처리합니다.
Pages/Index.cshtml → /Pages/Privacy.cshtml → /Privacy폴더 구조 기반으로 자동 라우팅이 이루어집니다.