Aracılığıyla paylaş


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 9 versiyonunagöz atın.

Uyarı

ASP.NET Core'un bu sürümü artık desteklenmiyor. Daha fazla bilgi için bkz. .NET ve .NET Core Destek İlkesi. Mevcut sürüm için, bu makalenin .NET 9 sürümünebakın.

Önemli

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

Geçerli sürüm için, bu makalenin .NET 9 sürümünebakın.

Bu makale, bir Blazor uygulamasında ortamını nasıl yapılandıracağınızı ve okuyacağınızı açıklar.

Bir uygulamayı yerel olarak çalıştırırken, ortam varsayılan olarak Developmentolarak değiştirilir. Uygulama yayımlandığında ortam varsayılan olarak Productionolarak ayarlanı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 şekilde adlandırın (appsettings.Staging.json). Üretim için ortam adı olarak "Production" (büyük "P") kullanın ve uygulama ayarları dosyasını eşleşecek şekilde adlandırın (appsettings.Production.json).

Ortamı ayarlama

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

bir Blazor Web Appistemcisinde ortam, Blazor-Environmentadlı bir üst bilgi aracılığıyla ortamı tarayıcıya ileten bir ara yazılım aracılığıyla sunucudan belirlenir. Üst bilgi, WebAssemblyHost istemci tarafı Program dosyasında (WebAssemblyHostBuilder.CreateDefault) oluşturulduğunda ortamı belirler.

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

Blazor Web App istemcisinde veya barındırılan bir Blazor WebAssembly uygulamasının istemcisinde, ortam sunucudan ortamı Blazor-Environmentadlı bir üst bilgi aracılığıyla tarayıcıya ileten bir ara yazılım aracılığıyla belirlenir. İstemci tarafı Program dosyasında (WebAssemblyHostBuilder.CreateDefault) WebAssemblyHost oluşturulduğunda, bu üst bilgi ortamı ayarlar.

Yerel olarak çalışan tek başına bir Blazor WebAssembly uygulaması için geliştirme sunucusu, barındırma ortamından alınan ortam adıyla Blazor-Environment üst bilgisini ekler. Barındırma ortamı, projenin Properties/launchSettings.json dosyası tarafından oluşturulan ASPNETCORE_ENVIRONMENT ortam değişkeninden ortamı ayarlar. Blazor WebAssembly proje şablonundan oluşturulan bir projedeki ortam değişkeninin varsayılan değeri Development. Daha fazla bilgi için üst bilgi aracılığıyla istemci tarafı ortamını ayarlama bölümüne bakın.

Uygulamanın geliştirme aşamasında yerel olarak çalışması için uygulama varsayılan olarak Development ortamına ayarlı olur. Uygulamayı yayımlamak, ortamı varsayılan olarak Productionolarak ayarlıyor.

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

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

Aşağıdaki örnek, konak adı localhostiçeriyorsa, Staging ortamında Blazor olarak başlar. Aksi takdirde ortam varsayılan değerine ayarlanır.

Blazor Web App:

<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 tutucusu Blazor betik yolu ve dosya adıdır. Betiğin konumu için bkz. ASP.NET Core Blazor proje yapısı.

Not

Blazor.start yapılandırmasında webAssembly>environment özelliğini ayarlayan Blazor Web Appiçin, sunucu tarafı ortamını environment özelliğinde ayarlanan ortamla eşleştirmek akıllıca olacaktır. Aksi takdirde, sunucuda ön işleme, istemcide işleme ile farklı bir ortamda çalışır ve bu da beklenmedik etkilere neden olur. Blazor Web Apportamını ayarlama hakkında genel yönergeler için bkz. ASP.NET Core'da birden çok ortam kullanma .

Bağımsız 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 tutucusu Blazor betik yolu ve dosya adıdır. Betiğin konumu için bkz. ASP.NET Core Blazor proje yapısı.

environment özelliğinin kullanılması, Blazor-Environment üst bilgisitarafından ayarlanan ortamı geçersiz kılar.

Önceki yaklaşım, istemcinin ortamını Blazor-Environment başlığının değerini değiştirmeden ayarlar ve genel Etkileşimli WebAssembly işlemeyi benimseyen bir Blazor Web App için sunucu projesinin başlangıç ortamının konsol kayıtlarını değiştirmez.

Bir Blazor WebAssembly projesi veya bir Blazor Web App.Client projesinde ortamı konsola kaydetmek için, WebAssemblyHost, WebAssemblyHostBuilder.CreateDefault ile oluşturulduktan sonra ve projeyi oluşturup çalıştıran satırdan önce aşağıdaki C# kodunu Program dosyasına yerleştirin (await builder.Build().RunAsync();).

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

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

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

Blazor WebAssembly uygulamalar ortamı Blazor-Environment başlığı üzerinden ayarlayabilir. Özellikle, yanıt üst bilgisinin _framework/blazor.boot.json dosyasında ayarlanması gerekir, ancak diğer Blazor dosya istekleri veya Blazor dağıtımının tamamı için dosya sunucusu yanıtlarında üst bilgiyi ayarlamanın bir zararı yoktur.

Blazor çerçevesi üst bilgi adını karma harf durumunda kebap biçimiyle verir (Blazor-Environment), ancak tümü küçük harf veya tümü büyük harf kebap biçimi kullanabilirsiniz (blazor-environment, BLAZOR-ENVIRONMENT).

Blazor'nin yerleşik geliştirme sunucusuyla yerel geliştirme çalıştırmaları için, projenin Properties/launchSettings.json dosyasındaki ASPNETCORE_ENVIRONMENT ortam değişkeninin değerini ayarlayarak Blazor-Environment üst bilgisinin değerini denetleyebilirsiniz. Geliştirme sunucusuyla yerel olarak çalışırken, uygulamanın ortamını belirlemek için öncelik sırası Blazor.start yapılandırma (environment anahtar)>Blazor-Environment yanıt üst bilgisi (blazor.boot.json dosyası) >ASPNETCORE_ENVIRONMENT ortam değişkenidir (launchSettings.json). Dağıtılan bir Blazor WebAssembly uygulaması için ASPNETCORE_ENVIRONMENT ortam değişkeni (launchSettings.json) yaklaşımını kullanamazsınız. Bu teknik yalnızca uygulamanın yerel çalıştırmalarında geliştirme sunucusuyla çalışır.

IIS

Iis için aşağıdaki örnekte, yayımlanan web.config dosyasına özel üst bilgi (Blazor-Environment) eklenir. web.config dosyası, {TARGET FRAMEWORK} yer tutucusunun hedef çerçeve olduğu bin/Release/{TARGET FRAMEWORK}/publish klasöründe 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 publish klasörüne yayımlandığında üzerine yazılmayan özel bir IIS için web.config dosyasını kullanmak için bkz. ASP.NET Core Blazor WebAssemblybarındırma ve dağıtma.

Nginx

Nginx sunucuları için ngx_http_headers_moduleadd_header yönergesini kullanın:

http {
    server {
        ...
        location / {
            ...
            add_header Blazor-Environment "Staging";
        }
    }
}

Daha fazla bilgi için aşağıdaki kaynaklara bakın:

Apache

Apache sunucuları için mod_headers modülündeki Header yönergesini kullanın:

<VirtualHost *:80>
    ...
    Header set Blazor-Environment "Staging"
    ...
</VirtualHost>

Daha fazla bilgi için:

Azure App Service ortamını ayarlama

Blazor WebAssembly bağımsız bir uygulama için, başlatma yapılandırması veya Blazor-Environment üst bilgisiüzerinden ortamı el ile ayarlayabilirsiniz.

Sunucu tarafı bir uygulama için Ortamı Azure'daki bir ASPNETCORE_ENVIRONMENT uygulama ayarı aracılığıyla ayarlayın:

  1. Uygulama ayarları dosya adlarındaki ortam segmentlerinin, ortam adıyla büyük/küçük harf uyumunu tam olarak sağladığından emin olun. Örneğin, Staging ortamı için eşleşen uygulama ayarları dosya adı appsettings.Staging.json. Dosya adı appsettings.staging.json (küçük harf "s") ise, dosya bulunmaz ve dosyadaki ayarlar Staging ortamında 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. BlazorAzureAppSampleadlı bir uygulama için, uygulama Staging dağıtım yuvasına dağıtılır.

  3. Ortamın dağıtım yuvası için Azure portalında ortamı ASPNETCORE_ENVIRONMENT uygulama ayarıyla ayarlayın. Bir BlazorAzureAppSampleuygulaması için hazırlık aşaması App Service Yuvası BlazorAzureAppSample/Stagingolarak adlandırılır. Staging yuvasının yapılandırması için ASPNETCORE_ENVIRONMENT için Stagingdeğerine sahip bir uygulama ayarı oluşturun. Dağıtım yuvası ayarı için etkinleştirilmiştir.

Tarayıcıda istendiğinde, BlazorAzureAppSample/Staging uygulaması https://blazorazureappsample-staging.azurewebsites.netkonumundaki Staging ortamında yüklenir.

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

Uygulama, {ENVIRONMENT} yer tutucusunun uygulamanın ortamı olduğu appsettings.{ENVIRONMENT}.json dosyasındaki ayarları yükler. Yukarıdaki örnekte, appsettings.Staging.json dosyasındaki ayarlar yüklenir.

Blazor WebAssembly uygulamasında ortamı okuma

IWebAssemblyHostEnvironment ekleyerek ve Environment özelliğini okuyarak uygulamanın ortamını bir bileşende edinin.

ReadEnvironment.razor:

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

<h1>Environment example</h1>

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

Blazor Web App'dan ortamı istemci tarafında oku

Bir bileşen veya uygulama için prerendering'in devre dışı bırakılmadığını varsayarsak, .Client projesindeki bir bileşen sunucuda önceden oluşturulur. Sunucunun kayıtlı bir IWebAssemblyHostEnvironment hizmeti olmadığından, hizmeti eklemek ve sunucu hazırlama 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 sunucuda IWebAssemblyHostEnvironment için ö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 hizmeti etkileşimli bir WebAssembly veya etkileşimli Otomatik bileşenine eklenebilir ve Ortamı Blazor WebAssembly uygulama okuma 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. Bir Blazor Web Apportamı ayarlarken, sunucu ve .Client proje ortamlarını eşleştirmek en iyisidir. Bir test uygulamasında aşağıdaki senaryoyu göz önünde bulundurun:

  • Blazor.startaracılığıyla Staging ortamıyla istemci tarafı (webassembly) ortam özelliğini uygulayın. Bir ö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. ASPNETCORE_ENVIRONMENT ortam değişkeni Developmentolarak ayarlanmış halde environmentVariables bölümünden çıkın.

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

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

Environment: Development

Bileşen yalnızca bir veya iki saniye sonra yeniden başlatıldığında, Blazor paketi indirildikten ve .NET WebAssembly çalışma zamanı etkinleştirildikten sonra, değerler istemcinin istemcideki Staging ortamında ç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, Blazor belgelerinde daha sonra yer alan İşleme modları makalesinin İstemci tarafı hizmetleri ön kullanım sırasında çözümlenememesi bölümüne bakın.

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

Başlatma sırasında WebAssemblyHostBuilder, HostEnvironment özelliği aracılığıyla IWebAssemblyHostEnvironment'i, konak oluşturucu kodunda ortama özgü mantığı etkinleştiren şekilde kullanıma sunar.

Program dosyasında:

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

WebAssemblyHostEnvironmentExtensions aracılığıyla sağlanan aşağıdaki kolaylık uzantısı yöntemleri, Development, Production, Stagingve özel ortam adları için geçerli ortamı denetlemeye izin verir:

Program dosyasında:

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

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

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

Ek kaynaklar