ASP.NET Core 외부에서 구성 요소 렌더링 Razor
Razor 구성 요소는 HTTP 요청의 컨텍스트 외부에서 렌더링할 수 있습니다. 구성 요소를 HTML로 직접 문자열에 렌더링 Razor 하거나 ASP.NET Core 호스팅 환경과 독립적으로 스트림할 수 있습니다. 전자 메일 콘텐츠 생성, 정적 사이트 콘텐츠 생성 또는 콘텐츠 템플릿 엔진 빌드와 같은 HTML 조각을 생성하려는 시나리오에 편리합니다.
다음 예제 Razor 에서는 구성 요소가 콘솔 앱에서 HTML 문자열로 렌더링됩니다.
명령 셸에서 새 콘솔 앱 프로젝트를 만듭니다.
dotnet new console -o ConsoleApp1
cd ConsoleApp1
폴더의 ConsoleApp1
명령 셸에서 콘솔 앱에 대한 Microsoft.AspNetCore.Components.WebMicrosoft.Extensions.Logging 패키지 참조를 추가합니다.
dotnet add package Microsoft.AspNetCore.Components.Web
dotnet add package Microsoft.Extensions.Logging
콘솔 앱의 프로젝트 파일(ConsoleApp1.csproj
)에서 SDK를 사용하도록 Razor 콘솔 앱 프로젝트를 업데이트합니다.
- <Project Sdk="Microsoft.NET.Sdk">
+ <Project Sdk="Microsoft.NET.Sdk.Razor">
프로젝트에 다음 RenderMessage
구성 요소를 추가합니다.
RenderMessage.razor
:
<h1>Render Message</h1>
<p>@Message</p>
@code {
[Parameter]
public string Message { get; set; }
}
Program
파일을 업데이트합니다.
- 종속성 주입() 및 로깅(IServiceCollectionILoggerFactory/BuildServiceProviderAddLogging/)을 설정합니다.
- HtmlRenderer 를 호출RenderComponentAsync하여 구성 요소를 만들고 렌더링
RenderMessage
합니다.
모든 호출은 RenderComponentAsync 구성 요소 디스패처에서 호출 InvokeAsync
하는 컨텍스트에서 이루어져야 합니다. 구성 요소 디스패처는 속성에서 HtmlRenderer.Dispatcher 사용할 수 있습니다.
using Microsoft.AspNetCore.Components;
using Microsoft.AspNetCore.Components.Web;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using ConsoleApp1;
IServiceCollection services = new ServiceCollection();
services.AddLogging();
IServiceProvider serviceProvider = services.BuildServiceProvider();
ILoggerFactory loggerFactory = serviceProvider.GetRequiredService<ILoggerFactory>();
await using var htmlRenderer = new HtmlRenderer(serviceProvider, loggerFactory);
var html = await htmlRenderer.Dispatcher.InvokeAsync(async () =>
{
var dictionary = new Dictionary<string, object?>
{
{ "Message", "Hello from the Render Message component!" }
};
var parameters = ParameterView.FromDictionary(dictionary);
var output = await htmlRenderer.RenderComponentAsync<RenderMessage>(parameters);
return output.ToHtmlString();
});
Console.WriteLine(html);
참고 항목
매개 변수를 RenderComponentAsync 전달하지 않고 구성 요소를 렌더링할 때 전달 ParameterView.Empty 합니다.
또는 호출output.WriteHtmlTo(textWriter)
하여 HTML을 작성 TextWriter 할 수 있습니다.
비동기 수명 주기 메서드를 완료하는 것을 포함하여 구성 요소가 완전히 렌더링될 때 완료된 작업이 RenderComponentAsync 완료됩니다. 렌더링된 HTML을 이전에 관찰하려면 대신 호출 BeginRenderingComponent 합니다. 그런 다음 반환 HtmlRootComponent 된 인스턴스에서 대기하여 구성 요소 렌더링이 완료되기를 HtmlRootComponent.QuiescenceTask 기다립니다.
ASP.NET Core
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기