Microsoft MVP성태의 닷넷 이야기
.NET Framework: 1020. .NET Core Kestrel 호스팅 - Razor 지원 추가 [링크 복사], [링크+제목 복사],
조회: 17254
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
(연관된 글이 1개 있습니다.)

.NET Core Kestrel 호스팅 - Razor 지원 추가

지난 글을 통해,

.NET Core Kestrel 호스팅 - Web API 추가
; https://www.sysnet.pe.kr/2/0/12505

기본 콘솔 프로젝트로 시작해 Web API까지 추가해봤는데요, 사실 Web API만 구현하는 거라면 거기서 만족할 수 있겠지만 웹 페이지까지 호스팅해야한다면 MapGet과 같은 식으로 만드는 것은,

app.UseEndpoints(endpoints =>
{
    endpoints.MapControllers();
    endpoints.MapGet("/", async context =>
    {
        await context.Response.WriteAsync("Hello World!");
    });
});

현실성이 거의 없습니다. 대개의 경우 편의성을 위해 Razor 페이지를 이용한 UI 호스팅을 원할 텐데요, 이를 위한 작업은 Web API에서 변경했던 것과 동일한 방식을 사용합니다. 즉, ConfigureServices에서 Razor 지원을 추가하고, Configure에서 Razor 페이지로의 redirection을 명시하는 것입니다.

public class Startup
{
    public void ConfigureServices(IServiceCollection services) 
    {
        services.AddControllers();
        services.AddRazorPages();
    }

    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        if (env.IsDevelopment())
        {
            Console.WriteLine("IsDevelopment");
            app.UseDeveloperExceptionPage();
        }

        app.UseRouting();
        app.UseEndpoints(endpoints =>
        {
            endpoints.MapControllers();
            endpoints.MapRazorPages();
        });
    }
}

테스트를 위해 간단하게 내용 구성을 한 razor 파일 하나(index.cshtml)를 추가하고,

@page

<h1>Hello, world!</h1>
<h2>The time on the server is @DateTime.Now</h2>

실행하면 될 텐데. ^^




실제로 저렇게 해보면 index.cshtml로의 redirection이 안 돼 File Not Found 오류가 발생합니다. 지난번에 추가한 Web API(ValuesController 예제)와는 달리 Razor는 기본 지정된 경로가 있기 때문입니다.

// https://learn.microsoft.com/en-us/aspnet/core/razor-pages/

/Pages/Index.cshtml         ==> / or /Index
/Pages/Contact.cshtml       ==> /Contact
/Pages/Store/Contact.cshtml ==> /Store/Contact
/Pages/Store/Index.cshtml   ==> /Store or /Store/Index

따라서, 반드시 Pages 디렉터리를 만들어 그 안에 cshtml 파일을 두고 호출을 해야만 정상적으로 endpoints.MapRazorPages() 설정에 의한 razor 페이지가 보입니다. 기타 자세한 route 정책은 다음의 문서를 참고하시고.

Razor Pages route and app conventions in ASP.NET Core
; https://learn.microsoft.com/en-us/aspnet/core/razor-pages/razor-pages-conventions




참고로 WebAPI의 경우 [Route] 특성을 이용해 경로 조정을 했던 것을 razor의 경우에는 @page로 제어할 수 있습니다.

@page "/Test2"
@model ConsoleApp1.TestModel
@{
}

<h1>TEST</h1>

(첨부 파일은 이 글의 예제 코드를 포함합니다.)




[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]

[연관 글]






[최초 등록일: ]
[최종 수정일: 11/23/2023]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer at outlook.com

비밀번호

댓글 작성자
 



2021-03-12 10시05분
Liquid 템플릿과,

Liquid - Safe, customer-facing template language for flexible web apps.
; https://shopify.github.io/liquid/
; https://github.com/Shopify/liquid

유사한 방식의 텍스트 템플릿 기능을 지원하는 .NET 패키지가 있군요. ^^

scriban/scriban
; https://github.com/scriban/scriban
정성태

... 151  152  153  154  155  156  157  158  159  160  161  162  163  164  [165]  ...
NoWriterDateCnt.TitleFile(s)
920정성태9/1/201034842오류 유형: 105. WMI - The RPC server is unavailable [2]
919정성태8/30/201040924DDK: 1. Visual Studio 2010 - Device Driver 제작- Hello World 예제 [3]파일 다운로드1
918정성태8/28/201027020개발 환경 구성: 87. Hyper-V의 네트워크 유형 (3)
917정성태8/26/201022000개발 환경 구성: 86. "Routing and Remote Access"의 "Routing" 기능 활성화 방법
916정성태8/25/201021302개발 환경 구성: 85. 가상 네트워크에 LAN 어댑터 보이거나 감추는 방법
915정성태8/24/201039349개발 환경 구성: 84. Hyper-V의 네트워크 유형 (2)
913정성태8/22/201028498오류 유형: 104. Hyper-V 관리자 - VM 생성 오류 (VHD 생성 오류)
912정성태8/20/201030377.NET Framework: 183. 구조체 포인터 인자에 대한 P/Invoke 정의파일 다운로드1
911정성태8/19/201027266오류 유형: 103. System.Reflection.TargetException파일 다운로드1
910정성태8/19/201038059개발 환경 구성: 83. Hyper-V의 네트워크 유형 (1)
909정성태8/18/201033449오류 유형: 102. System.MissingMethodException
908정성태8/17/201024456개발 환경 구성: 82. Windows Virtual PC의 네트워크 유형 (3)
907정성태8/14/201022017개발 환경 구성: 81. Windows Virtual PC의 네트워크 유형 (2)
906정성태8/13/201030834개발 환경 구성: 80. Windows Virtual PC의 네트워크 유형 (1)
905정성태8/8/201032989Team Foundation Server: 39. 배치 파일로 팀 빌드 구성 [2]파일 다운로드1
904정성태8/8/201035819오류 유형: 101. SignTool Error: No certificates were found that met all the given criteria. [2]
903정성태8/6/201032687Team Foundation Server: 38. TFS 소스 코드 관리 기능 (4) - Branch
902정성태8/5/201025067Team Foundation Server: 37. TFS 2010의 소스 서버 수작업 구성
901정성태8/4/201024309Team Foundation Server: 36. TFS 소스 코드 관리 기능 (3) - Label
900정성태8/3/201026988Team Foundation Server: 35. TFS 소스 코드 관리 기능 (2) - Shelveset
899정성태8/2/201029013Team Foundation Server: 34. TFS 소스 코드 관리 기능 (1) - Changeset
898정성태7/31/201028497.NET Framework: 182. WCF의 InactivityTimeout [1]파일 다운로드1
897정성태7/26/201129704.NET Framework: 181. AssemblyVersion, AssemblyFileVersion, AssemblyInformationalVersion [4]
896정성태7/25/201036528.NET Framework: 180. C# Singleton 인스턴스 생성 [2]
895정성태7/25/201020440VS.NET IDE: 68. Visual Studio 2010 - .NET 1.1 원격 디버깅
894정성태7/25/201026395오류 유형: 100. Could not find the Database Engine startup handle. [1]
... 151  152  153  154  155  156  157  158  159  160  161  162  163  164  [165]  ...