[Core 3.1] cshtml 파일에서 HttpContext 클래스 접근
2019. 12. 27. 23:43
728x90
반응형
cshtml 파일에서 세션에 대한 정보를 읽어오기 위해 HttpContext 클래스에 접근해야 하는 경우가 발생하였습니다.
public IActionResult Index()
{
var name = HttpContext.Session.GetString("_Name");
TempData["Session"] = name;
return View();
}
// ※ .Net Core 3.1 Sample code
public IActionResult Login()
{
HttpContext.Session.SetString("_Name", "Jeff");
return View();
}
View를 담당하는 cshtml 파일에서 해당 세션의 값을 가져오려면, Model 로 값을 넘기거나, TempData 변수에 담아서 넘기곤 했습니다.
Controller 에서 HttpContext는 어떻게 접근 되는 것인가?
기본적으로 각각의 Controller 클래스는 추상 클래스인 Controller 를 상속 받습니다.
또한 ControllerBase 추상클래스는 HttpContext 클래스를 프로퍼티로 구현되어 있습니다.
public class HomeController : Controller
public abstract class Controller : ControllerBase, IActionFilter,
IFilterMetadata, IAsyncActionFilter, IDisposable
이렇게 각각의 추상 클래스를 상속 받고 있기 때문에
각 Controller에서 HttpContext 객체에 접근하여 Session 을 기록하고, 읽어올수 있는 것입니다.
cshtml 파일에서 HttpContext 에 접근 할 수 있을까?
있습니다. cshtml 파일에서 아래의 namespace를 추가해 줌으로써 접근이 가능합니다.
@using Microsoft.AspNetCore.Http
@{
ViewData["Title"] = "Home Page";
}
위 방법으로 namespace 에 접근이 가능합니다.
하지만 Controller 에서 처럼 HttpContext 프로퍼티로 접근 하는 것이 아닌 Context 프로퍼티로 접근하게 됩니다.
<!-- Page Heading -->
<div>
@Context.Session.GetString("_Name")
</div>
Context 객체를 따라가 보면, RazorPage 추상클래스에 프로퍼티로 HttpContext 가 구현되어 있습니다.
이 Context 프로퍼티를 이용하여 HttpContext 클래스에 접근이 되는데요.
이 클래스는 Microsoft.AspNetCore.Http.HttpContext 클래스 이기 때문에 Session 에 접근이 가능한 것입니다.
728x90
'.NET' 카테고리의 다른 글
[.NET Core] Service 생명주기 - AddScoped, AddTransient, AddSingleton (2) | 2020.01.04 |
---|---|
[Core 3.1] ASP.NET Core Startup 클래스 정리 (0) | 2020.01.02 |
[Core 3.1] Session을 사용하기 위한 상태 구성 (0) | 2019.12.27 |
ASP.NET 의 HTTP Handler 와 HTTP Module 의 상호관계와 차이점. (0) | 2019.12.26 |
구조체(struct) 를 이용한 foreach문 사용 (0) | 2013.09.01 |