다음을 통해 공유


ASP.NET Core IHttpContextAccessor 앱의 /HttpContextBlazor

메모

이 문서의 최신 버전은 아닙니다. 현재 릴리스는 이 문서의 .NET 9 버전을 참조하세요.

중요하다

이 정보는 상업적으로 출시되기 전에 실질적으로 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보와 관련하여 명시적이거나 묵시적인 보증을 하지 않습니다.

현재 릴리스는 이 문서의 .NET 9 버전을 참조하세요.

IHttpContextAccessor는 일반적으로 유효한 HttpContext이 항상 사용할 수 있는 것은 아니기 때문에 대화형 렌더링에서는 피해야 합니다.

IHttpContextAccessor 는 정적 서버 쪽 렌더링(정적 SSR) 중에 사용할 수 있습니다.(예: 정적으로 렌더링된 루트 구성 요소에서) 서버의 웹 API 호출에 토큰 처리기를 사용할 때 사용할 수 있습니다. 정적 SSR이나 서버에서 실행되는 코드를 보장할 수 없는 경우에는 IHttpContextAccessor를 피할 것을 권장합니다.

HttpContext는 정적으로 렌더링된 루트 구성 요소에서만 또는 정적 SSR 중에 헤더 또는 구성 요소()의 다른 속성 App 검사 및 수정과 같은 일반적인 작업을 수행하는 동안에만 App.razor로 사용할 수 있습니다. 이 값은 null 대화형 렌더링 중에 발생합니다.

[CascadingParameter]
public HttpContext? HttpContext { get; set; }

고급 에지 사례† 추가 컨텍스트는 다음 문서의 설명을 참조하세요.

†이 문서의 일반적인 지침을 따를 때 앱을 빌드하고 유지 관리하는 Blazor 개발자는 고급 개념을 자세히 알아보지 않아도 됩니다. 가장 먼저 명심해야 할 개념은 HttpContext이(가) 기본적으로 서버 기반의 요청-응답 기능이라는 점입니다. 이는 정적 SSR 동안 서버에서만 일반적으로 사용할 수 있으며, 사용자의 회로가 설정된 경우에만 생성됩니다.

응답이 시작된 후 헤더를 설정하거나 수정하지 마세요.

첫 번째 렌더링 후(응답이 시작된 후) 헤더를 설정하거나 수정하려고 시도하면 오류가 발생합니다.

System.InvalidOperationException: 'Headers are read-only, response has already started.'

이 오류가 발생하는 상황의 예는 다음과 같습니다.

응답이 시작되기 전에 헤더를 설정하는 방법에 대한 지침은 ASP.NET Core Blazor 시작을 참조하세요.

서버 쪽 IHttpContextAccessor 앱의 / 구성 요소에서 직접 또는 간접적으로 HttpContextRazorBlazor 사용하지 마세요. Blazor 앱은 ASP.NET Core 파이프라인 컨텍스트 외부에서 실행됩니다. HttpContextIHttpContextAccessor내에서 가능하다고 보장되지 않으며, HttpContext가 Blazor 앱을 시작한 컨텍스트를 포함하도록 보장되지 않습니다.

Blazor 앱에 요청 상태를 전달하는 권장 방법은 앱의 초기 렌더링 중에 루트 구성 요소 매개 변수를 사용하는 것입니다. 또는 앱에서 사용할 루트 구성 요소의 초기화 수명 주기 이벤트에서 범위가 지정된 서비스로 데이터를 복사할 수 있습니다. 자세한 내용은 ASP.NET Core 서버 쪽 및 Blazor Web App 추가 보안 시나리오를 참조하세요.

서버 쪽 Blazor 보안의 중요한 측면은 회로가 설정된 후 Blazor 특정 시점에 지정된 회로에 연결된 사용자가 업데이트될 수 있지만 IHttpContextAccessor업데이트되지 않는다는 것입니다. 사용자 지정 서비스를 사용하여 이 상황을 해결하는 방법에 대한 자세한 내용은 ASP.NET Core 서버 쪽 및 Blazor Web App 추가 보안 시나리오를 참조하세요.

ASP.NET Core의 IHttpContextAccessorHttpContext에 대한 지침은 SignalR.SignalR