ASP.NET Core Blazor Hybrid 라우팅 및 탐색
참고 항목
이 문서의 최신 버전은 아닙니다. 현재 릴리스는 이 문서의 .NET 8 버전을 참조 하세요.
Important
이 정보는 상업적으로 출시되기 전에 실질적으로 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적, 또는 묵시적인 보증을 하지 않습니다.
현재 릴리스는 이 문서의 .NET 8 버전을 참조 하세요.
이 문서에서는 Blazor Hybrid 앱에서 요청 라우팅 및 탐색을 관리하는 방법을 설명합니다.
URI 요청 라우팅 동작
기본 URI 요청 라우팅 동작:
- 호스트 이름과 구성표가 앱의 원본 URI와 요청 URI 간에 일치하는 경우 링크는 내부 입니다. 호스트 이름 및 스키마가 일치하지 않거나 링크가 설정
target="_blank"
되면 링크가 외부로 간주됩니다. - 링크가 내부인 경우 앱이 해당 링크를
BlazorWebView
에서 엽니다. - 링크가 외부인 경우 해당 링크는 디바이스에서 링크 구성표에 대한 등록된 처리기를 기반으로 결정하는 앱에서 열립니다.
- URI의 마지막 세그먼트가 점 표기법(예
/file.x
: , )/Maryia.Melnyk
/image.gif
을 사용하지만 정적 콘텐츠를 가리키지 않으므로 파일을 요청하는 것처럼 보이는 내부 링크의 경우:- WPF 및 Windows Forms: 호스트 페이지 콘텐츠가 반환됩니다.
- .NET MAUI: 404 응답이 반환됩니다.
target="_blank"
를 설정하지 않는 링크에 대한 링크 처리 동작을 변경하려면 UrlLoading
이벤트를 등록하고 UrlLoadingEventArgs.UrlLoadingStrategy 속성을 설정합니다. UrlLoadingStrategy 열거형을 사용하면 링크 처리 동작을 다음 값 중 하나로 설정할 수 있습니다.
- OpenExternally: 디바이스에서 결정하는 앱을 사용하여 URL을 로드합니다. 외부 호스트를 사용하는 URI의 기본 전략입니다.
- OpenInWebView:
BlazorWebView
내에서 URL을 로드합니다. 호스트가 앱 원본과 일치하는 URL의 기본 전략입니다. 대상 URI를 완전히 신뢰할 수 있는 경우가 아니면 외부 링크에 이 전략을 사용하지 마세요. - CancelLoad: 현재 URL 로드 시도를 취소합니다.
UrlLoadingEventArgs.Url 속성은 URL을 가져오거나 동적으로 설정하는 데 사용됩니다.
Warning
외부 링크는 디바이스에 의해 결정되는 앱에서 열립니다. 외부 링크를 열면 보안 취약성이 BlazorWebView
발생할 수 있으며 외부 링크를 완전히 신뢰할 수 있는 경우가 아니면 사용하도록 설정하면 안 됩니다.
API 설명서:
- .NET MAUI: BlazorWebView.UrlLoading
- WPF: BlazorWebView.UrlLoading
- Windows Forms: BlazorWebView.UrlLoading
Microsoft.AspNetCore.Components.WebView 네임스페이스는 다음 예제에 필요합니다.
using Microsoft.AspNetCore.Components.WebView;
BlazorWebView
이(가) 생성되는 Page
의 생성자에 다음 이벤트 처리기를 추가하며, 이는 .NET MAUI 프로젝트 템플릿에서 만든 앱에서 MainPage.xaml.cs
됩니다.
blazorWebView.UrlLoading +=
(sender, urlLoadingEventArgs) =>
{
if (urlLoadingEventArgs.Url.Host != "0.0.0.0")
{
urlLoadingEventArgs.UrlLoadingStrategy =
UrlLoadingStrategy.OpenInWebView;
}
};
UrlLoading="Handle_UrlLoading"
특성을 .xaml
파일의 BlazorWebView
컨트롤에 다음과 같이 추가합니다.
<blazor:BlazorWebView HostPage="wwwroot\index.html"
Services="{StaticResource services}"
x:Name="blazorWebView"
UrlLoading="Handle_UrlLoading">
.xaml.cs
파일에 이벤트 처리기를 다음과 같이 추가합니다.
private void Handle_UrlLoading(object sender,
UrlLoadingEventArgs urlLoadingEventArgs)
{
if (urlLoadingEventArgs.Url.Host != "0.0.0.0")
{
urlLoadingEventArgs.UrlLoadingStrategy =
UrlLoadingStrategy.OpenInWebView;
}
}
BlazorWebView
컨트롤을 포함하는 양식의 생성자에서 다음 이벤트 등록을 추가합니다.
blazorWebView.UrlLoading +=
(sender, urlLoadingEventArgs) =>
{
if (urlLoadingEventArgs.Url.Host != "0.0.0.0")
{
urlLoadingEventArgs.UrlLoadingStrategy =
UrlLoadingStrategy.OpenInWebView;
}
};
초기 탐색에 대한 경로 가져오기 또는 설정
구성 요소 로드가 BlazorWebView.StartPath
완료되면 이 속성을 사용하여 탐색 컨텍스트 내에서 Blazor 초기 탐색 경로를 Razor 얻거나 설정합니다. 기본 시작 경로는 상대 루트 URL 경로(/
)입니다.
MainPage
XAML 태그(MainPage.xaml
)에서 시작 경로를 지정합니다. 다음 예제에서는 시작 페이지의 /welcome
경로를 다음과 같이 설정합니다.
<BlazorWebView ... StartPath="/welcome" ...>
...
<BlazorWebView>
또는 시작 경로를 생성자(MainPage.xaml.cs
)에서 MainPage
설정할 수 있습니다.
blazorWebView.StartPath = "/welcome";
MainWindow
디자이너(MainWindow.xaml
)에서 시작 경로를 지정합니다. 다음 예제에서는 시작 페이지의 /welcome
경로를 다음과 같이 설정합니다.
<blazor:BlazorWebView ... StartPath="/welcome" ...>
...
</blazor:BlazorWebView>
파일의 Form1
Form1.cs
생성자 내에서 시작 경로를 지정합니다. 다음 예제에서는 시작 페이지의 /welcome
경로를 다음과 같이 설정합니다.
blazorWebView1.StartPath = "/welcome";
페이지 및 Razor 구성 요소 간 탐색
이 섹션에서는 콘텐츠 페이지와 Razor 구성 요소 간 .NET MAUI 을 탐색하는 방법을 설명합니다.
하이브리드 프로젝트 템플릿은 .NET MAUIBlazor 셸 기반 앱이 아니므로 셸 기반 앱에 대한 URI 기반 탐색은 프로젝트 템플릿을 기반으로 하는 프로젝트에 적합하지 않습니다. 이 섹션의 예제에서는 모덜리스 또는 모달 탐색을 수행하는 데 사용합니다 NavigationPage .
다음 예제에서
- 앱의 네임스페이스는
MauiBlazor
앱 빌드 .NET MAUIBlazor Hybrid 자습서의 제안된 프로젝트 이름과 일치합니다. - A ContentPage 는 앱에 추가된 새 폴더에 배치됩니다
Views
.
에서 App.xaml.cs
다음과 같이 변경하여 as를 NavigationPage 만듭니 MainPage
다.
- MainPage = new MainPage();
+ MainPage = new NavigationPage(new MainPage());
Views/NavigationExample.xaml
:
<ContentPage xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:MauiBlazor"
x:Class="MauiBlazor.Views.NavigationExample"
Title="Navigation Example"
BackgroundColor="{DynamicResource PageBackgroundColor}">
<StackLayout>
<Label Text="Navigation Example"
VerticalOptions="Center"
HorizontalOptions="Center"
FontSize="24" />
<Button x:Name="CloseButton"
Clicked="CloseButton_Clicked"
Text="Close" />
</StackLayout>
</ContentPage>
다음 NavigationExample
코드 파일 CloseButton_Clicked
에서 닫기 단추에 대한 이벤트 처리기는 탐색 스택의 끄기를 ContentPage 호출 PopAsync 합니다.
Views/NavigationExample.xaml.cs
:
namespace MauiBlazor.Views;
public partial class NavigationExample : ContentPage
{
public NavigationExample()
{
InitializeComponent();
}
private async void CloseButton_Clicked(object sender, EventArgs e)
{
await Navigation.PopAsync();
}
}
Razor 구성 요소에서:
- 앱의 콘텐츠 페이지에 대한 네임스페이스를 추가합니다. 다음 예제에서 네임스페이스는 .입니다
MauiBlazor.Views
. - 이벤트 처리기를 사용하여
@onclick
HTMLbutton
요소를 추가하여 콘텐츠 페이지를 엽니다. 이벤트 처리기 메서드의 이름은OpenPage
.입니다. - 이벤트 처리기에서 ,
NavigationExample
를 탐색 스택에 푸시ContentPage하기 위해 호출 PushAsync 합니다.
다음 예제는 프로젝트 템플릿의 Index
구성 요소를 기반으로 합니다 .NET MAUIBlazor .
Pages/Index.razor
:
@page "/"
@using MauiBlazor.Views
<h1>Hello, world!</h1>
Welcome to your new app.
<SurveyPrompt Title="How is Blazor working for you?" />
<button class="btn btn-primary" @onclick="OpenPage">Open</button>
@code {
private async void OpenPage()
{
await App.Current.MainPage.Navigation.PushAsync(new NavigationExample());
}
}
앞의 예제를 모달 탐색으로 변경하려면 다음을 수행합니다.
메서드(
CloseButton_Clicked
Views/NavigationExample.xaml.cs
)에서 다음으로 변경 PopAsync 합니다PopModalAsync.- await Navigation.PopAsync(); + await Navigation.PopModalAsync();
메서드(
OpenPage
Pages/Index.razor
)에서 다음으로 변경 PushAsync 합니다PushModalAsync.- await App.Current.MainPage.Navigation.PushAsync(new NavigationExample()); + await App.Current.MainPage.Navigation.PushModalAsync(new NavigationExample());
자세한 내용은 다음 리소스를 참조하세요.
앱 연결(딥 링크)
웹 사이트의 링크가 모바일 앱을 시작하고 모바일 앱에 콘텐츠를 표시하도록 웹 사이트와 모바일 앱을 연결하는 것이 바람직한 경우가 많습니다. 딥 링크라고도 하는 앱 연결은 모바일 디바이스가 URI에 응답하고 URI로 표시되는 모바일 앱에서 콘텐츠를 시작할 수 있도록 하는 기술입니다.
자세한 내용은 설명서의 다음 문서를 .NET MAUI 참조하세요.
ASP.NET Core