[Core MVC] Controller 외의 클래스에서 Session 접근하기

Web Programming/ASP.NET & ASP.NET Core | 2018.01.30 16:37 | P.노우렛지

간혹 세션 정보를 읽고 고치는 작업을 다른 클래스나 함수로 독립시켜야 할 필요가 있다.

세션은 HttpContext라고 하는 클래스에 정의되어 있는데, HttpContext는 또 Microsoft.AspNetCore.Http에 정의되어 있다.


Controller 내에서는 얼마든지 HttpContext에 접근할 수 있고, 따라서 Session의 내용을 읽고 쓰는 것 또한 자유롭게 가능하다. 하지만 다른 클래스에서 세션에 접근하려면 어떻게 해야할까?


ASP.NET Core에서는 이러한 상황을 위해 HttpContextAccessor(이하 HCA)라는 클래스를 제공한다. 이것 또한 Microsoft.AspNetCore.Http에 정의되어 있다.


이것을 이용해 세션에 접근해보자.


일단 Startup.cs 를 열어서 ConfigureServices 메서드에 다음 줄을 추가한다.


1
services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();


그 다음 자유롭게 사용하면 된다. 생성자에서 HCA를 필드에 박아넣건, 혹은 메서드에서 HCA 객체를 가져오건 하면 된다.


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
using Microsoft.AspNetCore.Http;

namespace ASPNETApp
{
    class OutsideOfController
    {
        HttpContextAccessor _hca;

        public OutsideOfController()
        {
            _hca = new HttpContextAccessor(); // new가 선언되었지만 Singleton이므로 가리키는 객체는 항상 같다.
        }

        public void WriteValue(string keyName, string value)
        {
            _hca.HttpContext.Session.SetString(keyName, value);
        }
    }
}



거지같은 티스토리 에디터. 네이버 에디터는 코드 편집기 지원하는데 니네는 언제 할래?