.NET Core HttpContext 접근 방법 정리

ASP.NET을 ASP.NET Core로 업그레이드한 후 HttpContext.Current 사용이 불가능해지는 문제를 경험한 분들이 많을 것입니다. 이 문제를 해결하기 위해 ASP.NET Core에서 HttpContext를 접근하는 올바른 방법을 알아보겠습니다.

이 문서에서는 HttpContext를 사용하는 다양한 장면을 설명하고 각각의 해결 방법을示例로 제공합니다.

1. Controller에서 HttpContext 접근

Controller는 ControllerBase 추상 클래스를 상속받으며 이 클래스는 HttpContext에 대한 액세스를 제공합니다. HomeController 예제에서 확인할 수 있습니다:

public class UserController : Controller
{
    private readonly ILogger<UserController> _logger;
    private string userId;

    public UserController(ILogger<UserController> logger)
    {
        _logger = logger;
        userId = HttpContext.Request.Form["userId"];
    }
}

2. Middleware에서 HttpContext 사용

커스텀 미들웨어에서 HttpContext는 Invoke 메서드의 매개변수로 전달됩니다:

public class CustomMiddleware
{
    private readonly RequestDelegate _next;

    public CustomMiddleware(RequestDelegate next)
    {
        _next = next;
    }

    public async Task Invoke(HttpContext context)
    {
        // 요청 처리 시작 부분에 작업 수행
        await _next.Invoke(context);
        
        // 정리 작업 수행
    }
}

3. 데이터 액세스 계층에서 HttpContext 사용

UserRepository 예제에서 IHttpContextAccessor를 통해 HttpContext에 액세스합니다:

public class UserRepository : IUserRepository
{
    private readonly IHttpContextAccessor _httpContextAccessor;

    public UserRepository(IHttpContextAccessor httpContextAccessor)
    {
        _httpContextAccessor = httpContextAccessor;
    }

    public void AddUser(User user)
    {
        var username = _httpContextAccessor.HttpContext.User.Identity.Name;
        
        // 데이터베이스에 유저 저장
    }
}

4. 요청 외부에서 HttpContext 사용

HttpContext는 스레드가 안전하지 않습니다. 이 문제를 해결하기 위해 요청 처리 중에 필요한 데이터를 복사하고 배경 작업에 전달해야 합니다.

5. Razor 페이지 모델에서 HttpContext 접근

Razor 페이지 모델은 HttpContext에 접근할 수 있는 기반 클래스를 상속합니다:

public class UserProfileModel : PageModel
{
    public string Message { get; set; }

    public void OnGet()
    {
        Message = HttpContext.Request.PathBase;
    }
}

6. Razor 보기에서 HttpContext 접근

Razor 보기에서는 Context 속성 통해 HttpContext에 접근할 수 있습니다:

@{
    ViewData["Title"] = "홈 페이지";
    var username = Context.User.Identity.Name;
}

이상은 HttpContext를 접근하는 6가지 방법입니다. 더 많은 정보는 Microsoft 문서를 참고하시기 바랍니다.

태그: ASP.NET Core HttpContext middleware Razor Pages Dependency Injection

6월 6일 18:15에 게시됨