본문 바로가기
기타

[ASP.NET Core/Devroup] HttpContext.Session을 _Layout에서 사용하기 위한 방법

by 항붕쿤 2023. 3. 26.

 HttpContext.Session은 Razor 페이지나 View Component에서 사용 가능한 속성이지만 _Layout 페이지에서는 사용할 수 없다. 이는 _Layout 페이지는 레이아웃을 포함하는 페이지의 공통 요소인데 HttpContext.Session을 사용하면 세션이 여러 번 초기화될 수 있고, 예기치 않은 문제(예를 들어, _Layout 페이지에서 세션 값을 설정하고 다른 뷰에서 이 값을 읽으려고 할 때, _Layout 페이지가 가장 먼저 렌더링되기 때문에 세션 값이 아직 설정되지 않았을 수도 있다.)가 발생할 수 있기 때문이다. 따라서 _Layout 페이지에서 HttpContext.Session을 사용하려면, _ViewImports.cshtml 파일에 @using Microsoft.AspNetCore.Http를 추가하고, @inject IHttpContextAccessor HttpContextAccessor_Layout 페이지에 추가하여 HttpContext에 액세스할 수 있도록 해야한다.
그후 HttpContextAccessor.HttpContext.Session.GetString("Username") 식으로 HttpContext 앞에 HttpContextAccessor를 붙여 HttpContext 메서드를 사용해야한다.