Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Uwaga / Notatka
Nie jest to najnowsza wersja tego artykułu. Aby uzyskać najnowszą wersję tego artykułu, zobacz wersję platformy .NET 7.
W tym artykule wyjaśniono, jak skonfigurować hostowaną Blazor WebAssembly aplikację do hostowania wielu Blazor WebAssembly aplikacji.
Konfiguracja
Wybierz wersję tego artykułu, która jest zgodna z wymaganiami dotyczącymi hostingu, portem/domeną (na przykład ) lub:5001/:5002 hostem podścieżki tras (na przykładfirstapp.com/secondapp.com/FirstApp i )./SecondApp
W przypadku bieżącego wyboru hostingu w tym artykule opisano hostowanie portów/domen (na przykład :5001/:5002 lub ).firstapp.com/secondapp.com
W następujących przykładach:
- Nazwa projektu hostowanej Blazor WebAssembly aplikacji znajduje się
MultipleBlazorAppsw folderze o nazwieMultipleBlazorApps. - Trzy projekty w rozwiązaniu przed dodaniu drugiej aplikacji klienckiej znajdują się w
MultipleBlazorApps.Clientfolderze ,ClientwMultipleBlazorApps.Serverfolderze iServerw folderzeMultipleBlazorApps.Shared.Shared - Początkowa (pierwsza) aplikacja kliencka to domyślny projekt klienta rozwiązania utworzonego na podstawie szablonu Blazor WebAssembly projektu.
- Druga aplikacja kliencka jest dodawana do rozwiązania
MultipleBlazorApps.SecondClientw folderze o nazwieSecondClient. - Opcjonalnie projekt serwera (
MultipleBlazorApps.Server) może obsługiwać strony lub widoki jako strony lub aplikację Razor MVC. - Pierwsza aplikacja kliencka jest dostępna w przeglądarce na porcie 5001 lub z hostem
firstapp.comprogramu . Druga aplikacja kliencka jest dostępna w przeglądarce na porcie 5002 lub z hostemsecondapp.com.
W bieżącym zaznaczeniu w tym artykule opisano hostowanie podścieżki tras (na przykład /FirstApp i /SecondApp).
W następujących przykładach:
- Nazwa projektu hostowanej Blazor WebAssembly aplikacji znajduje się
MultipleBlazorAppsw folderze o nazwieMultipleBlazorApps. - Trzy projekty w rozwiązaniu przed dodaniu drugiej aplikacji klienckiej znajdują się w
MultipleBlazorApps.Clientfolderze ,ClientwMultipleBlazorApps.Serverfolderze iServerw folderzeMultipleBlazorApps.Shared.Shared - Początkowa (pierwsza) aplikacja kliencka to domyślny projekt klienta rozwiązania utworzonego na podstawie szablonu Blazor WebAssembly projektu.
- Druga aplikacja kliencka jest dodawana do rozwiązania
MultipleBlazorApps.SecondClientw folderze o nazwieSecondClient. - Opcjonalnie projekt serwera (
MultipleBlazorApps.Server) może obsługiwać strony lub widoki jako formalne Razor strony lub aplikację MVC. - Obie aplikacje klienckie używają domyślnego portu zdefiniowanego
MultipleBlazorApps.Serverprzez plik projektuProperties/launchSettings.jsonw jegoapplicationUrlwartości. Pierwsza aplikacja kliencka jest dostępna w przeglądarce w podścieżce/FirstApp. Druga aplikacja kliencka jest dostępna w przeglądarce w podścieżce/SecondApp.
Przykłady przedstawione w tym artykule wymagają dodatkowej konfiguracji dla:
- Uzyskiwanie dostępu do aplikacji bezpośrednio w przykładowych domenach hostów
firstapp.comisecondapp.com. - Certyfikaty dla aplikacji klienckich w celu włączenia zabezpieczeń protokołu TLS/HTTPS.
- Konfigurowanie aplikacji serwera jako Razor aplikacji Pages dla następujących funkcji:
- Integracja składników ze Razor stronami lub widokami.
- Składniki prerenderingu Razor .
Powyższe konfiguracje wykraczają poza zakres tego artykułu. Aby uzyskać więcej informacji, zobacz następujące zasoby:
- Hostowanie i wdrażanie ASP.NET Core
- Wymuszanie protokołu HTTPS w ASP.NET Core
- Integrowanie składników ASP.NET Core Razor z architekturą MVC lub Razor stronami w rozwiązaniach hostowanych Blazor WebAssembly
Użyj istniejącego Blazor WebAssembly hostowanego lub utwórz nowe Blazor WebAssembly hostowane rozwiązanie na podstawie Blazor WebAssembly szablonu projektu, przekazując -ho|--hosted opcję, jeśli używasz interfejsu wiersza polecenia platformy .NET lub zaznacz pole wyboru ASP.NET Core Hosted w programie Visual Studio po utworzeniu projektu w środowisku IDE.
Użyj folderu dla rozwiązania o nazwie MultipleBlazorApps i nadaj projektowi MultipleBlazorAppsnazwę .
Utwórz nowy folder w rozwiązaniu o nazwie SecondClient. W nowym folderze dodaj drugą aplikację kliencką Blazor WebAssembly o nazwie MultipleBlazorApps.SecondClient. Dodaj projekt jako aplikację autonomiczną Blazor WebAssembly . Aby utworzyć aplikację autonomiczną Blazor WebAssembly , nie przekazuj -ho|--hosted opcji, jeśli używasz interfejsu wiersza polecenia platformy .NET lub nie używaj pola wyboru ASP.NET Core Hosted w przypadku korzystania z programu Visual Studio.
Wprowadź następujące zmiany w projekcie MultipleBlazorApps.SecondClient :
-
FetchDataSkopiuj składnik (Pages/FetchData.razor) zClient/Pagesfolderu doSecondClient/Pagesfolderu . Ten krok jest wymagany, ponieważ aplikacja autonomiczna Blazor WebAssembly nie wywołuje Server kontrolera projektu na potrzeby danych pogodowych, używa pliku danych statycznych. KopiującFetchDataskładnik do dodanego projektu, druga aplikacja kliencka wykonuje również wywołanie internetowego interfejsu API do interfejsu API serwera na potrzeby danych pogodowych. -
SecondClient/wwwroot/sample-dataUsuń folder, ponieważweather.jsonplik w folderze nie jest używany.
W poniższej tabeli opisano foldery i nazwy projektów rozwiązania po SecondClient dodaniu folderu i MultipleBlazorApps.SecondClient projektu.
| Folder fizyczny | Nazwa projektu | Description |
|---|---|---|
Client |
MultipleBlazorApps.Client |
Blazor WebAssembly aplikacja kliencka |
SecondClient |
MultipleBlazorApps.SecondClient |
Blazor WebAssembly aplikacja kliencka |
Server |
MultipleBlazorApps.Server |
aplikacja serwera ASP.NET Core |
Shared |
MultipleBlazorApps.Shared |
Projekt zasobów udostępnionych |
Projekt MultipleBlazorApps.Server obsługuje dwie Blazor WebAssembly aplikacje klienckie i dostarcza dane pogodowe do składników aplikacji FetchData klienckich za pośrednictwem kontrolera MVC.
MultipleBlazorApps.Server Opcjonalnie projekt może również obsługiwać strony lub widoki jako tradycyjną Razor aplikację Pages lub MVC. Kroki włączania obsługi stron lub widoków zostały omówione w dalszej części tego artykułu.
Uwaga / Notatka
Demonstracja w tym artykule używa statycznych nazw FirstApp ścieżek zasobów internetowych dla MultipleBlazorApps.Client projektu i SecondAppMultipleBlazorApps.SecondClient projektu. Nazwy "FirstApp" i "SecondApp" służą jedynie do celów demonstracyjnych. Inne nazwy są dopuszczalne, aby odróżnić aplikacje klienckie, takie jak App1/App2,Client1/Client2 , 1/2lub dowolny podobny schemat nazewnictwa.
Podczas kierowania żądań do aplikacji klienckich przez port lub domenę element "FirstApp" i "SecondApp" są używane wewnętrznie do kierowania żądań i obsługi odpowiedzi dla zasobów statycznych i nie są widoczne na pasku adresu przeglądarki.
Uwaga / Notatka
Demonstracja w tym artykule używa statycznych nazw FirstApp ścieżek zasobów internetowych dla MultipleBlazorApps.Client projektu i SecondAppMultipleBlazorApps.SecondClient projektu. Nazwy "FirstApp" i "SecondApp" służą jedynie do celów demonstracyjnych. Inne nazwy są dopuszczalne, aby odróżnić aplikacje klienckie, takie jak App1/App2,Client1/Client2 , 1/2lub dowolny podobny schemat nazewnictwa.
"FirstApp" i "SecondApp" są również wyświetlane na pasku adresu przeglądarki, ponieważ żądania są kierowane do dwóch aplikacji klienckich przy użyciu tych nazw. Obsługiwane są inne prawidłowe segmenty tras adresów URL, a segmenty tras nie muszą ściśle odpowiadać nazwam używanym do kierowania statycznych zasobów internetowych wewnętrznie. Używanie wartości "FirstApp" i "SecondApp" zarówno dla wewnętrznego routingu zasobów statycznych, jak i routingu żądań aplikacji jest tylko na potrzeby convenance w przykładach tego artykułu.
W pliku projektu pierwszej aplikacji klienckiej (MultipleBlazorApps.Client.csproj) dodaj <StaticWebAssetBasePath> właściwość do <PropertyGroup> elementu z wartością FirstApp , aby ustawić ścieżkę podstawową dla zasobów statycznych projektu:
<StaticWebAssetBasePath>FirstApp</StaticWebAssetBasePath>
MultipleBlazorApps.SecondClient W pliku projektu aplikacji (MultipleBlazorApps.SecondClient.csproj):
<StaticWebAssetBasePath>Dodaj właściwość do obiektu<PropertyGroup>z wartościąSecondApp:<StaticWebAssetBasePath>SecondApp</StaticWebAssetBasePath>Dodaj odwołanie do projektu do
MultipleBlazorApps.Sharedelementu<ItemGroup>:<ItemGroup> <ProjectReference Include="..\Shared\MultipleBlazorApps.Shared.csproj" /> </ItemGroup>
W pliku projektu aplikacji serwera (Server/MultipleBlazorApps.Server.csproj) utwórz odwołanie do projektu dla dodanej MultipleBlazorApps.SecondClient aplikacji klienckiej w pliku <ItemGroup>:
<ProjectReference Include="..\SecondClient\MultipleBlazorApps.SecondClient.csproj" />
W pliku aplikacji Properties/launchSettings.json serwera skonfiguruj applicationUrlKestrel profil (MultipleBlazorApps.Server) w celu uzyskania dostępu do aplikacji klienckich na portach 5001 i 5002. Jeśli skonfigurujesz środowisko lokalne tak, aby używało przykładowych domen, adresy URL do applicationUrl użycia firstapp.com i secondapp.com nie używają portów.
Uwaga / Notatka
Użycie portów w tym pokazie umożliwia dostęp do projektów klienckich w przeglądarce lokalnej bez konieczności konfigurowania lokalnego środowiska hostingu, dzięki czemu przeglądarki internetowe mogą uzyskiwać dostęp do aplikacji klienckich firstapp.com za pośrednictwem konfiguracji hosta i secondapp.com. W scenariuszach produkcyjnych typową konfiguracją jest użycie poddomen w celu odróżnienia aplikacji klienckich.
Przykład:
- Porty są porzucane z konfiguracji tego pokazu.
- Hosty są zmieniane tak, aby używały domen podrzędnych, takich jak
www.contoso.comdla odwiedzających witryn iadmin.contoso.comdla administratorów. - Dodatkowe hosty można uwzględnić w przypadku dodatkowych aplikacji klienckich, a co najmniej jeden host jest wymagany, jeśli aplikacja serwera jest również aplikacją Razor Pages lub MVC, która obsługuje strony lub widoki.
Jeśli planujesz obsługiwać strony lub widoki z aplikacji serwera, użyj następującego applicationUrl ustawienia w Properties/launchSettings.json pliku, które zezwala na następujący dostęp:
- Opcjonalnie aplikacja Razor Pages lub MVC (
MultipleBlazorApps.Serverprojekt) odpowiada na żądania na porcie 5000. - Odpowiedzi na żądania pierwszego klienta (
MultipleBlazorApps.Clientprojektu) znajdują się na porcie 5001. - Odpowiedzi na żądania drugiego klienta (
MultipleBlazorApps.SecondClientprojektu) znajdują się na porcie 5002.
"applicationUrl": "https://localhost:5000;https://localhost:5001;https://localhost:5002",
Jeśli nie planujesz, aby aplikacja serwera obsługiwała strony lub widoki i obsługiwała Blazor WebAssembly tylko aplikacje klienckie, użyj następującego ustawienia, które zezwala na następujący dostęp:
- Pierwsza aplikacja kliencka odpowiada na porcie 5001.
- Druga aplikacja kliencka odpowiada na porcie 5002.
"applicationUrl": "https://localhost:5001;https://localhost:5002",
W pliku aplikacji Program.cs serwera usuń następujący kod, który pojawia się po wywołaniu metody UseHttpsRedirection:
Jeśli planujesz obsługiwać strony lub widoki z aplikacji serwera, usuń następujące wiersze kodu:
- app.UseBlazorFrameworkFiles();- app.MapFallbackToFile("index.html");Jeśli planujesz, aby aplikacja serwera obsługiwała Blazor WebAssembly tylko aplikacje klienckie, usuń następujący kod:
- app.UseBlazorFrameworkFiles(); ... - app.UseRouting(); - app.MapRazorPages(); - app.MapControllers(); - app.MapFallbackToFile("index.html");Pozostaw oprogramowanie pośredniczące pliku statycznego w miejscu:
app.UseStaticFiles();
Dodaj oprogramowanie pośredniczące mapujące żądania do aplikacji klienckich. Poniższy przykład umożliwia skonfigurowanie oprogramowania pośredniczącego do uruchomienia, gdy port żądania to 5001 dla pierwszej aplikacji klienckiej lub 5002 dla drugiej aplikacji klienckiej, albo host żądania jest
firstapp.comprzeznaczony dla pierwszej aplikacji klienckiej lubsecondapp.comdrugiej aplikacji klienckiej.Uwaga / Notatka
Użycie hostów () w
firstapp.com/secondapp.comsystemie lokalnym z przeglądarką lokalną wymaga dodatkowej konfiguracji, która wykracza poza zakres tego artykułu. W przypadku lokalnego testowania tego scenariusza zalecamy używanie portów. Typowe aplikacje produkcyjne są skonfigurowane do używania poddomen, takich jakwww.contoso.comdla odwiedzających witryn iadmin.contoso.comdla administratorów. Dzięki właściwej konfiguracji dns i serwera, która wykracza poza zakres tego artykułu i zależy od używanych technologii, aplikacja odpowiada na żądania na dowolnych hostach nazwanych w poniższym kodzie.Gdzie usunięto
app.UseBlazorFrameworkFiles();wiersz zProgram.cs, umieść następujący kod:app.MapWhen(ctx => ctx.Request.Host.Port == 5001 || ctx.Request.Host.Equals("firstapp.com"), first => { first.Use((ctx, nxt) => { ctx.Request.Path = "/FirstApp" + ctx.Request.Path; return nxt(); }); first.UseBlazorFrameworkFiles("/FirstApp"); first.UseStaticFiles(); first.UseStaticFiles("/FirstApp"); first.UseRouting(); first.UseEndpoints(endpoints => { endpoints.MapControllers(); endpoints.MapFallbackToFile("/FirstApp/{*path:nonfile}", "FirstApp/index.html"); }); }); app.MapWhen(ctx => ctx.Request.Host.Port == 5002 || ctx.Request.Host.Equals("secondapp.com"), second => { second.Use((ctx, nxt) => { ctx.Request.Path = "/SecondApp" + ctx.Request.Path; return nxt(); }); second.UseBlazorFrameworkFiles("/SecondApp"); second.UseStaticFiles(); second.UseStaticFiles("/SecondApp"); second.UseRouting(); second.UseEndpoints(endpoints => { endpoints.MapControllers(); endpoints.MapFallbackToFile("/SecondApp/{*path:nonfile}", "SecondApp/index.html"); }); });Ostrzeżenie
Interfejs API, który opiera się na nagłówku hosta, takim jak HttpRequest.Host i RequireHost, podlega potencjalnemu fałszowaniu przez klientów.
Aby zapobiec fałszowaniu hostów i portów, użyj jednej z następujących metod:
- Użyj HttpContext.Connection (ConnectionInfo.LocalPort), gdzie sprawdzane są porty.
- Zastosowanie filtrowania hostów.
Dodaj oprogramowanie pośredniczące mapujące żądania do aplikacji klienckich. Poniższy przykład umożliwia skonfigurowanie oprogramowania pośredniczącego do uruchomienia, gdy ścieżka podrzędna żądania dotyczy
/FirstApppierwszej aplikacji klienckiej lub/SecondAppdrugiej aplikacji klienckiej.Gdzie usunięto
app.UseBlazorFrameworkFiles();wiersz zProgram.cs, umieść następujący kod:app.MapWhen(ctx => ctx.Request.Path.StartsWithSegments("/FirstApp", StringComparison.OrdinalIgnoreCase), first => { first.UseBlazorFrameworkFiles("/FirstApp"); first.UseStaticFiles(); first.UseStaticFiles("/FirstApp"); first.UseRouting(); first.UseEndpoints(endpoints => { endpoints.MapControllers(); endpoints.MapFallbackToFile("/FirstApp/{*path:nonfile}", "FirstApp/index.html"); }); }); app.MapWhen(ctx => ctx.Request.Path.StartsWithSegments("/SecondApp", StringComparison.OrdinalIgnoreCase), second => { second.UseBlazorFrameworkFiles("/SecondApp"); second.UseStaticFiles(); second.UseStaticFiles("/SecondApp"); second.UseRouting(); second.UseEndpoints(endpoints => { endpoints.MapControllers(); endpoints.MapFallbackToFile("/SecondApp/{*path:nonfile}", "SecondApp/index.html"); }); });Ustaw ścieżkę podstawową w każdej aplikacji klienckiej:
W pliku pierwszej aplikacji klienckiej
index.html(Client/wwwroot/index.html) zaktualizuj wartość tagu<base>, aby odzwierciedlić ścieżkę podrzędną. Końcowy ukośnik jest wymagany:<base href="/FirstApp/" />W pliku drugiej aplikacji klienckiej
index.html(SecondClient/wwwroot/index.html) zaktualizuj wartość tagu<base>, aby odzwierciedlić ścieżkę podrzędną. Końcowy ukośnik jest wymagany:<base href="/SecondApp/" />
Aby uzyskać więcej informacji na temat UseStaticFilesprogramu , zobacz ASP.NET Core Blazor plików statycznych.
Aby uzyskać więcej informacji na temat UseBlazorFrameworkFiles i MapFallbackToFile, zobacz następujące zasoby:
- Microsoft.AspNetCore.Builder.ComponentsWebAssemblyApplicationBuilderExtensions.UseBlazorFrameworkFiles (źródło referencyjne)
- Microsoft.AspNetCore.Builder.StaticFilesEndpointRouteBuilderExtensions.MapFallbackToFile (źródło referencyjne)
Uwaga / Notatka
Linki dokumentacyjne do źródła referencyjnego .NET zwykle ładują domyślną gałąź repozytorium, która odzwierciedla obecne prace rozwojowe nad nadchodzącą wersją .NET. Aby wybrać tag dla określonej wersji, użyj listy rozwijanej Przełącz gałęzie lub tagi. Aby uzyskać więcej informacji, zobacz Jak wybrać tag wersji kodu źródłowego ASP.NET Core (dotnet/AspNetCore.Docs #26205).
Żądania z aplikacji klienckich do /WeatherForecast w interfejsie API serwera są kierowane do /FirstApp/WeatherForecast lub /SecondApp/WeatherForecast w zależności od tego, która aplikacja kliencka wysyła żądanie. W związku z tym kontroler kieruje trasy, które zwracają dane pogodowe z interfejsu API serwera, wymagają modyfikacji w celu uwzględnienia segmentów ścieżki.
W kontrolerze prognozy pogody aplikacji serwera (Controllers/WeatherForecastController.cs) zastąp istniejącą trasę ([Route("[controller]")]) WeatherForecastController następującymi trasami, które uwzględniają ścieżki żądań klienta:
[Route("FirstApp/[controller]")]
[Route("SecondApp/[controller]")]
Jeśli planujesz obsługiwać strony z aplikacji serwera, dodaj IndexRazor stronę do Pages folderu aplikacji serwera:
Pages/Index.cshtml:
@page
@model MultipleBlazorApps.Server.Pages.IndexModel
@{
ViewData["Title"] = "Home";
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>Home</title>
</head>
<body>
<div class="main">
<div class="content px-4">
<div>
<h1>Welcome</h1>
<p>Hello from Razor Pages!</p>
</div>
</div>
</div>
</body>
</html>
Pages/Index.cshtml.cs:
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
namespace MultipleBlazorApps.Server.Pages;
public class IndexModel : PageModel
{
public void OnGet()
{
}
}
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
namespace MultipleBlazorApps.Server.Pages
{
public class IndexModel : PageModel
{
public void OnGet()
{
}
}
}
Uwaga / Notatka
Poprzednia Index strona jest minimalnym przykładem wyłącznie w celach demonstracyjnych. Jeśli aplikacja wymaga dodatkowych Razor zasobów stron, takich jak układ, style, skrypty i importy, uzyskaj je z aplikacji utworzonej Razor na podstawie szablonu projektu Pages. Aby uzyskać więcej informacji, zobacz Razor Architektura i pojęcia dotyczące stron w programie ASP.NET Core.
Jeśli planujesz obsługiwać widoki MVC z aplikacji serwera, dodaj Index widok i Home kontroler:
Views/Home/Index.cshtml:
@{
ViewData["Title"] = "Home";
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>Home</title>
</head>
<body>
<div class="main">
<div class="content px-4">
<div>
<h1>Welcome</h1>
<p>Hello from MVC!</p>
</div>
</div>
</div>
</body>
</html>
Controllers/HomeController.cs:
using Microsoft.AspNetCore.Mvc;
namespace MultipleBlazorApps.Server.Controllers;
public class HomeController : Controller
{
public IActionResult Index() => View();
}
Uwaga / Notatka
Powyższy Index widok jest minimalnym przykładem wyłącznie w celach demonstracyjnych. Jeśli aplikacja wymaga dodatkowych zasobów MVC, takich jak układ, style, skrypty i importy, uzyskaj je z aplikacji utworzonej na podstawie szablonu projektu MVC. Aby uzyskać więcej informacji, zobacz Wprowadzenie do ASP.NET Core MVC.
Aby uzyskać więcej informacji na temat używania Razor składników z jednej z aplikacji klienckich na stronach lub widokach aplikacji serwera, zobacz Integrowanie składników ASP.NET Core Razor z mvC lub Razor stronami w hostowanych Blazor WebAssembly rozwiązaniach.
Uruchom aplikację
MultipleBlazorApps.Server Uruchom projekt:
- Uzyskaj dostęp do początkowej aplikacji klienckiej pod adresem
https://localhost:5001. - Uzyskaj dostęp do dodanej aplikacji klienckiej pod adresem
https://localhost:5002. - Jeśli aplikacja serwera jest skonfigurowana do obsługi stron lub widoków, uzyskaj dostęp do
Indexstrony lub widoku pod adresemhttps://localhost:5000.
- Uzyskaj dostęp do początkowej aplikacji klienckiej pod adresem
https://localhost:{DEFAULT PORT}/FirstApp. - Uzyskaj dostęp do dodanej aplikacji klienckiej pod adresem
https://localhost:{DEFAULT PORT}/SecondApp. - Jeśli aplikacja serwera jest skonfigurowana do obsługi stron lub widoków, uzyskaj dostęp do
Indexstrony lub widoku pod adresemhttps://localhost:{DEFAULT PORT}.
W poprzednich przykładowych adresach URL {DEFAULT PORT} symbol zastępczy jest domyślnym portem zdefiniowanym przez MultipleBlazorApps.Server plik projektu Properties/launchSettings.json w jego applicationUrl wartości.
Ważne
Podczas uruchamiania aplikacji za pomocą dotnet watch polecenia (lub dotnet run) (interfejs wiersza polecenia platformy .NET) upewnij się, że powłoka poleceń jest otwarta w Server folderze rozwiązania.
Jeśli używasz przycisku Uruchamiania programu Visual Studio do uruchamiania aplikacji, upewnij się, że MultipleBlazorApps.Server projekt jest ustawiony jako projekt startowy (wyróżniony w Eksploratorze rozwiązań).
Zasoby statyczne
Gdy zasób znajduje się w folderze aplikacji wwwroot klienckiej, podaj statyczną ścieżkę żądania zasobu w składnikach:
<img alt="..." src="{PATH AND FILE NAME}" />
Symbol zastępczy {PATH AND FILE NAME} to ścieżka i nazwa pliku pod wwwroot.
Na przykład źródło obrazu Jeep (jeep-yj.png) w vehicle folderze :wwwroot
<img alt="Jeep Wrangler YJ" src="vehicle/jeep-yj.png" />
Razor Obsługa biblioteki klas (RCL)
Dodaj bibliotekęRazor klas (RCL) do rozwiązania jako nowy projekt:
- Kliknij prawym przyciskiem myszy rozwiązanie w Eksploratorze rozwiązań i wybierz polecenie Dodaj>nowy projekt.
- Użyj szablonu projektu Biblioteka klas, aby utworzyć projekt.Razor Przykłady w tej sekcji używają nazwy
ComponentLibraryprojektu , która jest również nazwą zestawu listy RCL. Nie zaznaczaj pól wyboru Strony i widoki pomocy technicznej .
Dla każdej hostowanej Blazor WebAssembly aplikacji klienckiej utwórz odwołanie do projektu listy RCL, klikając prawym przyciskiem myszy każdy projekt klienta w Eksploratorze rozwiązań i wybierając polecenie Dodaj>odwołanie do projektu.
Użyj składników z listy RCL w aplikacjach klienckich z jedną z następujących metod:
Umieść dyrektywę
@usingw górnej części składnika dla przestrzeni nazw listy RCL i dodaj Razor składnię składnika. Poniższy przykład dotyczy listy RCL o nazwieComponentLibraryzestawu :@using ComponentLibrary ... <Component1 />Podaj przestrzeń nazw listy RCL wraz ze składnią Razor składnika. Takie podejście nie wymaga
@usingdyrektywy w górnej części pliku składnika. Poniższy przykład dotyczy listy RCL o nazwieComponentLibraryzestawu :<ComponentLibrary.Component1 />
Uwaga / Notatka
Dyrektywę @using można również umieścić w pliku każdej aplikacji _Import.razor klienckiej, co sprawia, że przestrzeń nazw listy RCL jest globalnie dostępna dla składników w tym projekcie.
Jeśli dowolny inny zasób statyczny znajduje się w wwwroot folderze listy RCL, odwołaj się do zasobu statycznego w aplikacji klienckiej zgodnie ze wskazówkami w temacie Interfejs użytkownika wielokrotnego użytku Razor w bibliotekach klas z ASP.NET Core:
<img alt="..." src="_content/{PACKAGE ID}/{PATH AND FILE NAME}" />
Symbol {PACKAGE ID} zastępczy to identyfikator pakietu listy RCL. Identyfikator pakietu domyślnie określa nazwę zestawu projektu, jeśli tag <PackageId> nie jest określony w pliku projektu. Symbol {PATH AND FILE NAME} zastępczy to ścieżka i nazwa pliku w obszarze wwwroot.
W poniższym przykładzie pokazano znaczniki obrazu Jeep (jeep-yj.png) w vehicle folderze folderu listy RCL wwwroot . Poniższy przykład dotyczy listy RCL o nazwie ComponentLibraryzestawu :
<img alt="Jeep Wrangler YJ" src="_content/ComponentLibrary/vehicle/jeep-yj.png" />