[Core 3.1] ASP.NET Core ActionFilter를 이용한 Session 체크

728x90
반응형

 

Session을 이용해서 유저를 관리할 경우, 각 Controller에서 세션의 유무를 체크해야 하는 경우가 발생합니다. 

그때마다 HttpContext.Session.GetString 을 이용해서 세션이 존재하는지 체크하는 것 보다는, 

ActionFilter를 이용해서 체크 할 수 있습니다. 

 

 

ActionFilter 추가

CheckSession.cs 파일을 추가해서 아래와 같이 코딩하였습니다. 

using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Filters;
using Microsoft.AspNetCore.Routing;

public class CheckSession : ActionFilterAttribute, IActionFilter
{
    public override void OnActionExecuting(ActionExecutingContext context)
    {
        var ctx = context.HttpContext;

        if (ctx.Session.GetString("_Name") == null)
        {
            context.Result = new RedirectToRouteResult(new RouteValueDictionary(new { action = "Login", controller = "Home" }));
        }

        base.OnActionExecuting(context);
    }
}

ActionFilterAttribute 를 상속 받아, OnActionExecuting 메소드를 override 해줍니다. 

해당 메소드 안에 세션을 체크하고, 체크 뒤 null 일 경우 RedirectToRouteResult 메소드를 이용해서 다른 페이지로 이동시켜 주었습니다.

 

 


Controller 에 Filter 추가

public class AlarmController : Controller
{
    [CheckSession]
    public IActionResult Index()
    {
        return View();
    }
}

[CheckSession] 을 추가 해줌으로써, 해당 ActionFilter 기능을 이용 할 수 있습니다. 

 

 

728x90