ASP.NET Core Blazor ortamları

Not

Bu, bu makalenin en son sürümü değildir. Geçerli sürüm için bu makalenin .NET 8 sürümüne bakın.

Önemli

Bu bilgiler, ticari olarak piyasaya sürülmeden önce önemli ölçüde değiştirilebilen bir yayın öncesi ürünle ilgilidir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.

Geçerli sürüm için bu makalenin .NET 8 sürümüne bakın.

Bu makalede, bir Blazor uygulamada ortamı yapılandırma ve okuma açıklanmaktadır.

Bir uygulamayı yerel olarak çalıştırırken, ortam varsayılan olarak şeklindedir Development. Uygulama yayımlandığında, ortam varsayılan olarak olarak Productionayarlanır.

Aşağıdaki kuralları öneririz:

  • Yerel geliştirme için her zaman "Development" ortam adını kullanın. Bunun nedeni, ASP.NET Core çerçevesinin uygulamayı yapılandırırken tam olarak bu adı beklemesi ve bir uygulamanın yerel geliştirme çalıştırmaları için araçlara sahip olmasıdır.

  • Test, hazırlama ve üretim ortamları için uygulamayı her zaman yayımlayın ve dağıtın. Yayımlanan uygulamalar için istediğiniz ortam adlandırma düzenini kullanabilirsiniz, ancak her zaman ortam adıyla tam olarak eşleşen ortam kesiminin büyük/küçük harflerini içeren uygulama ayarı dosya adlarını kullanabilirsiniz. Hazırlama için ortam adı olarak "Staging" (büyük "S") kullanın ve uygulama ayarları dosyasını eşleşecek (appsettings.Staging.json) olarak adlandırın. Üretim için ortam adı olarak "Production" (büyük "P") kullanın ve uygulama ayarları dosyasını eşleşecek (appsettings.Production.json) olarak adlandırın.

Ortamı ayarlama

Ortam aşağıdaki yaklaşımlardan herhangi biri kullanılarak ayarlanır:

Web Uygulamasının istemcisinde Blazor ortam, adlı blazor-environmentbir üst bilgi aracılığıyla ortamı tarayıcıya ileten bir ara yazılım aracılığıyla sunucudan belirlenir. üst bilgisi, istemci tarafı Program dosyasında (WebAssemblyHostBuilder.CreateDefault) oluşturulduğunda ortamı WebAssemblyHost ayarlar.

Ortam aşağıdaki yaklaşımlardan herhangi biri kullanılarak ayarlanır:

Web Uygulamasının istemcisinde Blazor veya barındırılan Blazor WebAssembly bir uygulamanın istemcisinde ortam, adlı blazor-environmentbir üst bilgi aracılığıyla ortamı tarayıcıya ileten bir ara yazılım aracılığıyla sunucudan belirlenir. üst bilgisi, istemci tarafı Program dosyasında (WebAssemblyHostBuilder.CreateDefault) oluşturulduğunda ortamı WebAssemblyHost ayarlar.

Yerel olarak çalışan tek başına Blazor WebAssembly bir uygulama için geliştirme sunucusu üst bilgiyi ekler blazor-environment .

Uygulamanın yerel olarak geliştirme aşamasında çalışması için, uygulama varsayılan olarak ortamı kullanır Development . Uygulamayı yayımlamak, ortamı varsayılan olarak olarak Productionkullanır.

ASP.NET Core uygulama yapılandırması hakkında genel yönergeler için bkz . ASP.NET Core'da birden çok ortam kullanma. Geliştirme ve test sırasında ortamın Development dışındaki ortamlarda statik dosyalar içeren sunucu tarafı uygulama yapılandırması için (örneğin, Staging) bkz . ASP.NET Temel Blazor statik dosyalar.

Başlangıç yapılandırması aracılığıyla Blazor istemci tarafı ortamını ayarlama

Konak adı içeriyorsalocalhost, aşağıdaki örnek ortamda başlar.BlazorStaging Aksi takdirde ortam varsayılan değerine ayarlanır.

Blazor Web Uygulaması:

<script src="{BLAZOR SCRIPT}" autostart="false"></script>
<script>
  if (window.location.hostname.includes("localhost")) {
    Blazor.start({
      webAssembly: {
        environment: "Staging"
      }
    });
  } else {
    Blazor.start();
  }
</script>

Yukarıdaki örnekte, {BLAZOR SCRIPT} yer tutucu betik yolu ve dosya adıdır Blazor . Betiğin konumu için bkz . ASP.NET Core Blazor proje yapısı.

Not

Blazor Özelliği yapılandırmada ayarlayan webAssemblyenvironment>Web Apps içinBlazor.start, sunucu tarafı ortamını özelliğinde ayarlanan ortamla eşleştirmek environment akıllıca olacaktır. Aksi takdirde, sunucuda ön kayıt istemcide işlemeden farklı bir ortamda çalışır ve bu da rastgele etkilere neden olur. Web Uygulamasının ortamını ayarlama hakkında genel yönergeler için Blazor bkz . ASP.NET Core'da birden çok ortam kullanma.

Tek başına Blazor WebAssembly:

<script src="{BLAZOR SCRIPT}" autostart="false"></script>
<script>
  if (window.location.hostname.includes("localhost")) {
    Blazor.start({
      environment: "Staging"
    });
  } else {
    Blazor.start();
  }
</script>

Yukarıdaki örnekte, {BLAZOR SCRIPT} yer tutucu betik yolu ve dosya adıdır Blazor . Betiğin konumu için bkz . ASP.NET Core Blazor proje yapısı.

özelliğinin environment kullanılması, üst bilgi tarafından blazor-environment ayarlanan ortamı geçersiz kılar.

Yukarıdaki yaklaşım, üst bilginin değerini değiştirmeden istemcinin blazor-environment ortamını ayarlar ve genel Interactive WebAssembly işlemesini benimseyen bir Blazor Web Uygulaması için sunucu projesinin başlangıç ortamının konsol günlüğünü değiştirmez.

Ortamı tek başına Blazor WebAssembly bir projede veya .Client Bir Web Uygulamasının Blazor projesinde konsola kaydetmek için, aşağıdaki C# kodunu Program dosyası oluşturulduktan WebAssemblyHostBuilder.CreateDefault sonra WebAssemblyHost ve projeyi derleyen ve çalıştıran satırdan önce (await builder.Build().RunAsync();):

Console.WriteLine(
    $"Client Hosting Environment: {builder.HostEnvironment.Environment}");

Blazor'ı başlatma hakkında daha fazla bilgi için bkz. ASP.NET Core Blazor'ı başlatma.

üst bilgi aracılığıyla istemci tarafı ortamını ayarlama

Blazor WebAssembly uygulamalar, üst bilgiyle blazor-environment ortamı ayarlayabilir.

Aşağıdaki IIS örneğinde, yayımlanan web.config dosyaya özel üst bilgi (blazor-environment) eklenir. Dosya web.config , yer tutucunun bin/Release/{TARGET FRAMEWORK}/publish{TARGET FRAMEWORK} hedef çerçeve olduğu klasörde bulunur:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <system.webServer>

    ...

    <httpProtocol>
      <customHeaders>
        <add name="blazor-environment" value="Staging" />
      </customHeaders>
    </httpProtocol>
  </system.webServer>
</configuration>

Not

Uygulama klasörde yayımlandığında publish üzerine yazılmamış iis için özel web.config bir dosya kullanmak için bkz. ASP.NET Core'u Blazor WebAssemblybarındırma ve dağıtma.

Çerçeve, üst bilgi adını tüm küçük harflerle ()blazor-environment yazsa Blazor da, istediğiniz büyük/küçük harflerden birini kullanabilirsiniz. Örneğin, her sözcüğü (Blazor-Environment) büyük harfe çevirir bir üst bilgi adı desteklenir.

Azure Uygulaması Hizmeti için ortamı ayarlama

Tek başına Blazor WebAssembly bir uygulama için, başlatma yapılandırması veya blazor-environment üst bilgi aracılığıyla ortamı el ile ayarlayabilirsiniz.

Sunucu tarafı bir uygulama için, Azure'da bir ASPNETCORE_ENVIRONMENT uygulama ayarı aracılığıyla ortamı ayarlayın:

  1. Uygulama ayarları dosya adlarındaki ortam kesimlerinin büyük/küçük harfle çevrelerinin ortam adı büyük/küçük harfleriyle tam olarak eşleşdiğini onaylayın. Örneğin, ortamın eşleşen uygulama ayarları dosya adı Staging şeklindedir appsettings.Staging.json. Dosya adı appsettings.staging.json ("küçük harfs" ise), dosya bulunmaz ve dosyadaki ayarlar ortamda Staging kullanılmaz.

  2. Visual Studio dağıtımı için uygulamanın doğru dağıtım yuvasına dağıtıldığını onaylayın. adlı BlazorAzureAppSamplebir uygulama için uygulama dağıtım yuvasına Staging dağıtılır.

  3. Ortamın dağıtım yuvası için Azure portalında ortamı uygulama ayarıyla ASPNETCORE_ENVIRONMENT ayarlayın. adlı BlazorAzureAppSamplebir uygulama için hazırlama App Service Yuvası olarak adlandırılır BlazorAzureAppSample/Staging. Yuvanın Staging yapılandırması için ASPNETCORE_ENVIRONMENT değerine Stagingsahip bir uygulama ayarı oluşturun. Dağıtım yuvası ayarı, ayar için etkinleştirilir.

Tarayıcıda istendiğinde, BlazorAzureAppSample/Staging uygulama konumundaki Staginghttps://blazorazureappsample-staging.azurewebsites.netortama yüklenir.

Uygulama tarayıcıda yüklendiğinde, için blazor.boot.json yanıt üst bilgisi koleksiyonu üst bilgi değerinin blazor-environment olduğunu Staginggösterir.

Dosyadaki appsettings.{ENVIRONMENT}.json uygulama ayarları, yer tutucunun uygulamanın ortamı olduğu {ENVIRONMENT} uygulama tarafından yüklenir. Yukarıdaki örnekte, dosyadaki appsettings.Staging.json ayarlar yüklenir.

Uygulamadaki Blazor WebAssembly ortamı okuma

Özelliği ekleyerek ve okuyarak IWebAssemblyHostEnvironment uygulamanın ortamını bir bileşende Environment alın.

ReadEnvironment.razor:

@page "/read-environment"
@using Microsoft.AspNetCore.Components.WebAssembly.Hosting
@inject IWebAssemblyHostEnvironment Env

<h1>Environment example</h1>

<p>Environment: @Env.Environment</p>

Web Uygulamasında ortam istemci tarafı Blazor okuma

Bir bileşen veya uygulama için prerendering'in devre dışı bırakılmadığını varsayarsak, projedeki .Client bir bileşen sunucuda önceden oluşturulur. Sunucunun kayıtlı IWebAssemblyHostEnvironment bir hizmeti olmadığından, hizmeti eklemek ve sunucu ön kullanımı sırasında hizmet uygulamasının ana bilgisayar ortamı uzantısı yöntemlerini ve özelliklerini kullanmak mümkün değildir. Hizmeti Etkileşimli WebAssembly veya Etkileşimli Otomatik bileşene eklemek aşağıdaki çalışma zamanı hatasına neden olur:

There is no registered service of type 'Microsoft.AspNetCore.Components.WebAssembly.Hosting.IWebAssemblyHostEnvironment'.

Bu sorunu gidermek için sunucusunda için IWebAssemblyHostEnvironment özel bir hizmet uygulaması oluşturun. Sunucu projesine aşağıdaki sınıfı ekleyin.

ServerHostEnvironment.cs:

using Microsoft.AspNetCore.Components.WebAssembly.Hosting;
using Microsoft.AspNetCore.Components;

public class ServerHostEnvironment(IWebHostEnvironment env, NavigationManager nav) : 
    IWebAssemblyHostEnvironment
{
    public string Environment => env.EnvironmentName;
    public string BaseAddress => nav.BaseUri;
}

Sunucu projesinin Program dosyasında hizmeti kaydedin:

builder.Services.TryAddScoped<IWebAssemblyHostEnvironment, ServerHostEnvironment>();

Bu noktada, IWebAssemblyHostEnvironment hizmet etkileşimli bir WebAssembly veya etkileşimli Otomatik bileşenine eklenebilir ve Uygulamayı okuma Blazor WebAssembly bölümünde gösterildiği gibi kullanılabilir.

Yukarıdaki örnek, istemci ortamından farklı bir sunucu ortamına sahip olabileceğinizi gösterebilir; bu önerilmez ve rastgele sonuçlara yol açabilir. Web Uygulamasında ortamı Blazor ayarlarken en iyisi sunucu ve .Client proje ortamlarını eşleştirmektir. Bir test uygulamasında aşağıdaki senaryoyu göz önünde bulundurun:

  • aracılığıyla Blazor.startortamıyla Staging istemci tarafı (webassembly) ortam özelliğini uygulayın. Örnek için Başlangıç yapılandırması aracılığıyla istemci tarafı ortamını ayarlama bölümüne bakın.
  • Sunucu tarafı Properties/launchSettings.json dosyasını değiştirmeyin. environmentVariables ortam değişkeninin ASPNETCORE_ENVIRONMENT olarak ayarlandığı Developmentbölümü bırakın.

Özellik değişikliğinin IWebAssemblyHostEnvironment.Environment değerini kullanıcı arabiriminde görebilirsiniz.

Sunucuda prerendering gerçekleştiğinde, bileşen ortamda işlenir Development :

Environment: Development

Bileşen yalnızca bir veya iki saniye sonra yeniden başlatıldığında, paket indirildikten ve Blazor WebAssembly çalışma zamanı etkinleştirildikten sonra Blazor değerler, istemcinin istemci ortamında Staging çalıştığını yansıtacak şekilde değişir:

Environment: Staging

Yukarıdaki örnekte, sunucu ortamını geliştirme, test ve üretim dağıtımları için istemci ortamıyla eşleşecek şekilde ayarlamanızı neden önerdiğimiz gösterilmektedir.

Daha fazla bilgi için, belgelerde daha sonra Blazor görünen İşleme modları makalesinin Ön kullanım sırasında İstemci tarafı hizmetleri çözümlenememesi bölümüne bakın.

Başlatma sırasında istemci tarafı ortamını okuma

başlatma sırasında, WebAssemblyHostBuilder özelliği aracılığıyla HostEnvironment özelliğini kullanıma sunar IWebAssemblyHostEnvironment ve konak oluşturucu kodunda ortama özgü mantığı etkinleştirir.

Program dosyasında:

if (builder.HostEnvironment.Environment == "Custom")
{
    ...
};

, , ProductionStagingve özel ortam adları için Developmentgeçerli ortamın denetlenme izniyle WebAssemblyHostEnvironmentExtensions sağlanan aşağıdaki kolaylık uzantısı yöntemleri:

Program dosyasında:

if (builder.HostEnvironment.IsStaging())
{
    ...
};

if (builder.HostEnvironment.IsEnvironment("Custom"))
{
    ...
};

özelliği, IWebAssemblyHostEnvironment.BaseAddress hizmet kullanılabilir olmadığında NavigationManager başlatma sırasında kullanılabilir.

Ek kaynaklar