Microsoft MVP성태의 닷넷 이야기
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
(연관된 글이 1개 있습니다.)
(시리즈 글이 4개 있습니다.)
.NET Framework: 412. HttpContext.Current를 통해 이해하는 CallContext와 ExecutionContext
; https://www.sysnet.pe.kr/2/0/1608

.NET Framework: 727. ASP.NET의 HttpContext.Current 구현에 대응하는 ASP.NET Core의 IHttpContextAccessor/HttpContextAccessor 사용법
; https://www.sysnet.pe.kr/2/0/11440

.NET Framework: 989. HttpContextAccessor를 통해 이해하는 AsyncLocal<T>
; https://www.sysnet.pe.kr/2/0/12467

.NET Framework: 1076. C# - AsyncLocal 기능을 CallContext만으로 구현하는 방법
; https://www.sysnet.pe.kr/2/0/12706




ASP.NET의 HttpContext.Current 구현에 대응하는 ASP.NET Core의 IHttpContextAccessor/HttpContextAccessor 사용법

HttpContext.Current와 같은 구현이 왜 필요할까요?

가령 ASP.NET Core 프로젝트에서 별도의 라이브러리(DLL)를 참조해 현재 요청의 HOST 명을 반환하는 메서드를 구현한다고 가정해 보겠습니다. 만약 HttpContext.Current가 없다면 ASP.NET Core 측에서 명시적인 Request 객체를 다음과 같이 넘겨줘야만 합니다.

// asp.net core 측에서 호출할 때,

[HttpGet]
public IEnumerable<string> Get()
{
    ClassLibrary1.Class1 cl = new ClassLibrary1.Class1();
    return new string[] { cl.GetHost(this.Request) };
}

// 라이브러리 프로젝트에서 Request를 접근할 때,

using Microsoft.AspNetCore.Http;
using System;

namespace ClassLibrary1
{
    public class Class1
    {
        public string GetHost(HttpRequest req)
        {
            return req.Host.ToString();
        }
    }
}

즉, 라이브러리에서 HttpRequest나 HttpResponse와 연관된 기능이 필요하다면 언제나 저렇게 명시적으로 객체를 넘겨줘야만 하는 것입니다.

그런데 이런 불편함을 기존 ASP.NET에서는 HttpContext.Current 객체를 이용해 해결했었습니다. 그리고 ASP.NET Core에서도 이와 유사한 역할을 하는 IHttpContextAccessor/HttpContextAccessor 타입을 제공해 주고 있는데,

The IHttpContextAccessor service is not registered by default
; https://github.com/aspnet/Announcements/issues/190

How to get HttpContext.Current in ASP.NET Core? [duplicate]
; https://stackoverflow.com/questions/38571032/how-to-get-httpcontext-current-in-asp-net-core

사용을 위해 ConfigureServices에서 다음과 같이 추가해 줘야 합니다.

public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc();

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

이것을 사용하면 이전에 구현한 GetHost 메서드를 다음과 같이 바꿀 수 있습니다.

using Microsoft.AspNetCore.Http;
using System;

namespace ClassLibrary1
{
    public class Class1
    {
        public string GetHost()
        {
            HttpContextAccessor hca = new HttpContextAccessor();

            return hca.HttpContext.Request.Host.ToString();
        }
    }
}

첨부 파일은 이 글의 예제 코드를 포함합니다.




[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]

[연관 글]






[최초 등록일: ]
[최종 수정일: 12/30/2020]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer at outlook.com

비밀번호

댓글 작성자
 




... 166  167  168  169  170  171  172  173  174  [175]  176  177  178  179  180  ...
NoWriterDateCnt.TitleFile(s)
627정성태12/6/200823350VS.NET IDE: 58. VS.NET IDE 팁 - 커서 위치 이동 [1]
626정성태12/6/200823610오류 유형: 65. TF53018: The application tier XXXXXXX is attempting to connect to a data tier with an incompatible version
625정성태12/6/200823805오류 유형: 64. TFS 2008 SP1 설치 - MsiApplyMultiplePatches returned 0x643
624정성태12/5/200824726.NET Framework: 114. WPF 이벤트에 속한 핸들러 확인 [2]파일 다운로드1
623정성태12/4/200829093디버깅 기술: 22. VS.NET SP1 + .NET Framework 소스 코드 디버깅 [2]파일 다운로드1
622정성태12/1/200831357오류 유형: 63. WPF - XamlParseException 대응 방법 [2]
621정성태11/30/200823527Team Foundation Server: 27. TeamBuild + VDPROJ 셋업 프로젝트 [1]
620정성태11/30/200822395디버깅 기술: 21. 올바른 이벤트 예외 정보 출력
619정성태11/30/200822497디버깅 기술: 20. 예외 처리를 방해하는 WPF Modal 대화창파일 다운로드1
618정성태11/29/200822922.NET Framework: 113. 이벤트에 속한 이벤트 핸들러 확인파일 다운로드1
617정성태11/26/200828510.NET Framework: 112. How to Interop DISPPARAMS [2]파일 다운로드2
616정성태11/26/200822264디버깅 기술: 19. C++/CLI - F11 디버깅 시의 변수 초기화파일 다운로드1
615정성태11/9/200831970.NET Framework: 111. WPF - Window, UserControl 클래스 상속 [1]
614정성태11/9/200831931.NET Framework: 110. WPF - 전역 예외 처리 [4]파일 다운로드1
613정성태11/8/200821539.NET Framework: 109. WPF - SystemColors 색상표파일 다운로드1
612정성태11/1/200826792.NET Framework: 108. WPF + WCF 환경에서는 DataContract를 권장 [1]
611정성태10/31/200821121오류 유형: 62. WPF - Visual Studio 2008 비정상 종료
610정성태10/24/200823314Team Foundation Server: 26. TFS 2008 SP1 + SQL Server 2008 설치
609정성태10/24/200827040.NET Framework: 107. WPF - RadioButton 데이터 바인딩 해제 현상파일 다운로드2
608정성태10/23/200821751오류 유형: 61. TFS 연결 오류: TF31003, TF30331 오류
607정성태10/18/200819689Windows: 32. 자동 실행 경로에 ".." 가 포함된 경우
606정성태10/18/200821699.NET Framework: 106. WCF - 다중 서비스 호스트파일 다운로드1
605정성태10/18/200825140.NET Framework: 105. WPF - 닫기 버튼을 없애려면.
604정성태10/18/200825692오류 유형: 60. System.Management.ManagementException - Generic failure [1]
602정성태10/15/200827661오류 유형: 59. WPF - XAML 로딩 시 Visual Studio 비정상 종료 [1]
600정성태10/9/200832305디버깅 기술: 18. TFS Team Build + Source Server = 소스 코드 디버깅 [3]
... 166  167  168  169  170  171  172  173  174  [175]  176  177  178  179  180  ...