Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Warning
ASP.NET Core'un bu sürümü artık desteklenmiyor. Daha fazla bilgi için bkz . .NET ve .NET Core Destek İlkesi. Geçerli sürüm için bu makalenin .NET 9 sürümüne bakın.
ASP.NET Core uygulamasındaki statik dosyalar, statik varlıklar olarak da adlandırılır ve dinamik olarak oluşturulmaz. Bunun yerine, doğrudan istek üzerine istemcilere sunulur, örneğin HTML, CSS, görüntü ve JavaScript dosyaları.
Blazor Bu makaledeki yönergeleri ekleyen veya yerine geçen statik dosyalar kılavuzu için bkz. ASP.NET Temel Blazor statik dosyalar.
ASP.NET Core'da statik dosya işlemeyi etkinleştirmek için çağrısına tıklayın MapStaticAssets.
Varsayılan olarak, statik dosyalar projenin web kök dizininde depolanır. Varsayılan dizin, {CONTENT ROOT}/wwwrootyer tutucunun {CONTENT ROOT} uygulamanın içerik kökü olduğu dizinidir. Yalnızca wwwroot klasöründeki dosyalar adreslenebilir olduğundan kodunuzun geri kalanıyla ilgili endişelenmeniz gerekmez.
Yalnızca desteklenen medya türlerine eşlenen belirli dosya uzantılarına sahip dosyalar statik web varlıkları olarak değerlendirilir.
Statik web varlıkları derleme zamanında bulunur ve eski dosyaların yeniden kullanılmasını önlemek için içerik tabanlı parmak izi kullanılarak iyileştirilir. Varlıklar, varlık teslim süresini azaltmak için de sıkıştırılır .
Çalışma zamanında, tespit edilen statik web varlıkları, önbellek üst bilgileri ve içerik türü üst bilgileri gibi HTTP üst bilgileri uygulanmış olarak uç noktalar halinde sunulur. Bir varlık, dosya değişene veya tarayıcı önbelleğini temizleyene kadar bir kez sunulur.
ETag, Last-Modifiedve Content-Type üst bilgileri ayarlanır. Bir uygulama güncelleştirildikten sonra tarayıcının eski varlıkları kullanması engellenir.
Statik varlıkların teslimi uç nokta yönlendirmesini temel alır, bu nedenle yetkilendirme gibi uç nokta kullanan diğer özelliklerle çalışır. Tüm kullanıcı arabirimi çerçeveleriyle, Blazor, Razor Pages ve MVC dahil çalışacak şekilde tasarlanmıştır.
Statik Varlıkların Haritalanması aşağıdaki avantajları sağlar:
- JavaScript (JS) ve stil sayfaları dahil ancak zaten sıkıştırılmış olan görüntü ve yazı tipi varlıkları hariç olmak üzere uygulamadaki tüm varlıklar için derleme zamanı sırasında yapılan sıkıştırma.
Gzip (
Content-Encoding: gz) sıkıştırması geliştirme sırasında kullanılır. Yayımlama sırasında hem Gzip hem de Brotli (Content-Encoding: br) sıkıştırması kullanılır. - Derleme zamanında, her dosyanın içeriğinin SHA-256 karmasının Base64 kodlanmış dizesiyle tüm varlıklar için parmak izi oluşturma. Bu, eski dosya önbelleğe alınmış olsa bile dosyanın eski bir sürümünün yeniden kullanılabilir olmasını önler. Parmak izi alınmış varlıklar yönergesi
immutablekullanılarak önbelleğe alınır ve bu da tarayıcının değişene kadar varlığı bir daha istemesine neden olmaz. Yönergesini desteklemeyen tarayıcılar içinimmutablebirmax-ageyönerge eklenir.- Bir varlığın parmak izi oluşturulmamış olsa bile, her statik varlık için dosyanın parmak izi karması değer olarak
ETagskullanılarak içerik tabanlıETagoluşturulur. Bu, tarayıcının yalnızca içeriği değiştiğinde (veya dosya ilk kez indiriliyorsa) dosyayı indirmesini sağlar. - Dahili olarak, çerçeve fiziksel varlıkları parmak izleriyle eşler ve bu da uygulamanın şunları yapmasını sağlar:
- 'nin CSS Razor için Blazorbileşen kapsamlı CSS gibi otomatik olarak oluşturulan varlıkları ve JSiçeri aktarma eşlemeleri tarafındanJS açıklanan varlıkları bulun.
- Varlıkları önceden yüklemek için sayfanın içeriğinde
<head>bağlantı etiketleri oluşturun.
- Bir varlığın parmak izi oluşturulmamış olsa bile, her statik varlık için dosyanın parmak izi karması değer olarak
Harita Statik Varlıkları, minifikasyon veya diğer dosya dönüşümleri için özellikler sunmaz. Küçültme genellikle özel kod veya üçüncü taraf araçlarıyla işlenir.
ASP.NET Core'da statik dosya işlemeyi etkinleştirmek için çağrısına tıklayın UseStaticFiles.
Varsayılan olarak, statik dosyalar projenin web kök dizininde depolanır. Varsayılan dizin, {CONTENT ROOT}/wwwrootyer tutucunun {CONTENT ROOT} uygulamanın içerik kökü olduğu dizinidir. Yalnızca wwwroot klasöründeki dosyalar adreslenebilir olduğundan kodunuzun geri kalanıyla ilgili endişelenmeniz gerekmez.
Çalışma zamanında statik web dosyaları, dosya değişikliği ve içerik türü başlıkları uygulanarak istendiğinde Statik Dosya Ara Yazılımı tarafından döndürülür.
ETag, Last-Modifiedve Content-Type üst bilgileri ayarlanır.
Statik Dosya Ara Yazılımı statik dosya sunumunu etkinleştirir ve uygulamanın istek işleme işlem hattında çağrıldığında UseStaticFiles bir uygulama tarafından kullanılır. Dosyalar, IWebHostEnvironment.WebRootPath veya WebRootFileProvider içinde belirtilen yoldan sunulur ve varsayılan olarak web kök klasöründe bulunur, bu da genellikle wwwroot'dir.
Ayrıca başvurulan projeler ve paketlerden statik web varlıkları da sağlayabilirsiniz.
Web kök dizinini değiştirme
Web kökünü değiştirmek istiyorsanız UseWebRoot yöntemini kullanın. Daha fazla bilgi için bkz. ASP.NET Temel bilgilere genel bakış.
Proje dosyasındaki wwwroot/local içeriğini ve alt dizinlerindeki içeriği yayımlamayı engeller:
<ItemGroup>
<Content Update="wwwroot\local\**\*.*" CopyToPublishDirectory="Never" />
</ItemGroup>
CreateBuilder yöntemi, içerik kökünü geçerli dizine ayarlar:
var builder = WebApplication.CreateBuilder(args);
CreateDefaultBuilder yöntemi, içerik kökünü geçerli dizine ayarlar:
Host.CreateDefaultBuilder(args)
çağrısından UseHttpsRedirectionsonra istek işleme işlem hattında, uygulamanın MapStaticAssets statik dosyalar sunulmasını sağlamak için uygulamanın istek işleme işlem hattını çağırın:
app.MapStaticAssets();
çağrısından UseHttpsRedirectionsonra istek işleme işlem hattında, uygulamanın UseStaticFiles statik dosyalar sunulmasını sağlamak için uygulamanın istek işleme işlem hattını çağırın:
app.UseStaticFiles();
Statik dosyalara web köküne göre bir yol üzerinden erişilebilir.
konumundaki wwwroot/images/favicon.pngbir görüntüye erişmek için:
- URL biçimi:
https://{HOST}/images/{FILE NAME}- Yer
{HOST}yer tutucu sunucudur. - "
{FILE NAME}yer tutucu, dosya adını temsil eder."
- Yer
- Örnekler
- Mutlak URL:
https://localhost:5001/images/favicon.png - Kök göreli URL' si:
images/favicon.png
- Mutlak URL:
Bir Blazor uygulamada, images/favicon.png uygulamanın favicon.png klasöründeki simge görüntüsünü (wwwroot/images) yükler:
<link rel="icon" type="image/png" href="images/favicon.png" />
Razor Sayfalar ve MVC uygulamalarında tilde karakteri ~ web kökünü gösterir. Aşağıdaki örnekte, ~/images/favicon.png uygulamanın favicon.png klasöründeki simge görüntüsünü (wwwroot/images) yükler:
<link rel="icon" type="image/png" href="~/images/favicon.png" />
Orta katman yazılım işlem hattını kestirme
Statik bir varlık eşleştirildiğinde, ara yazılım işlem hattının tamamının çalışmasını engellemek için UseStaticFiles üzerinde ShortCircuit çağrısını yapın MapStaticAssets. ShortCircuit'ı çağırmak, uç noktayı hemen yürütüp yanıtı döndürür ve böylece statik varlık istekleri için diğer ara yazılımların yürütülmesini önler.
app.MapStaticAssets().ShortCircuit();
Geliştirme sırasında statik dosya önbelleğe almayı denetleme
Geliştirme ortamında çalışırken, örneğin Visual Studio Hızlı Yeniden Yükleme geliştirme testi sırasında, framework tarayıcıların statik dosyaları önbelleğe almasını önlemek için önbellek başlıklarını iptal eder. Bu, dosyalar değiştiğinde dosyaların en son sürümünün kullanılmasını sağlamaya yardımcı olur ve eski içerikle ilgili sorunları önler. Üretimde doğru önbellek üst bilgileri ayarlanır, bu da tarayıcıların statik varlıkları beklendiği şekilde önbelleğe almalarına olanak tanır.
Bu davranışı devre dışı bırakmak için, Geliştirme ortamının uygulama ayarı dosyasında EnableStaticAssetsDevelopmentCaching ayarını true olarak yapın (appsettings.Development.json).
Development olmayan ortamlardaki statik dosyalar
Bir uygulamayı yerel olarak çalıştırırken, statik web varlıkları yalnızca Geliştirme ortamında etkinleştirilir. Yerel geliştirme ve test sırasında Geliştirme ortamı dışındaki ortamlarda (örneğin, Hazırlama ortamında) statik dosyaları etkinleştirmek için, UseStaticWebAssetsWebApplicationBuilder çağırın.
Warning
Proje dışındaki diskteki ayrı konumlardan dosyalara hizmet vermesinden dolayı üretimde özelliğin etkinleştirilmesini önlemek için UseStaticWebAssetsçağırın. Bu bölümdeki örnek IsStaging ile Hazırlama ortamını kontrol eder.
if (builder.Environment.IsStaging())
{
builder.WebHost.UseStaticWebAssets();
}
"Web kök dizininin dışından dosya sunma işlemi IWebHostEnvironment.WebRootPath aracılığıyla gerçekleştirilebilir."
IWebHostEnvironment.WebRootPath dışında wwwrootbir klasöre ayarlandığında aşağıdaki varsayılan davranışlar sergilenir:
- Geliştirme ortamında, aynı ada sahip varlıklar hem
wwwroothem dewwwroot'ye atanan farklı bir klasördeyse, statik varlıklar WebRootPath'dan sunulur. - Geliştirme ortamı dışında, WebRootPath klasöründen yinelenen statik varlıklar sunulur.
Boş web şablonundan oluşturulmuş bir web uygulaması düşünün:
-
Index.htmlvewwwrootiçinde birwwwroot-customdosyası içerir. -
ProgramdosyasıWebRootPath = "wwwroot-custom"olarak ayarlanacak şekilde güncellenir.
var builder = WebApplication.CreateBuilder(new WebApplicationOptions
{
Args = args,
WebRootPath = "wwwroot-custom"
});
Varsayılan olarak, /'a yapılan istekler için:
- Geliştirme ortamında
wwwroot/Index.htmldöndürülür. - Geliştirme ortamı dışında herhangi bir ortamda
wwwroot-custom/Index.htmldöndürülür.
varlıklarının wwwroot-custom her zaman döndürülmesini sağlamak için aşağıdaki yaklaşımlardan birini kullanın:
içindeki
wwwrootyinelenen adlandırılmış varlıkları silin.ASPNETCORE_ENVIRONMENT,Properties/launchSettings.jsoniçindeDevelopmentdışında herhangi bir değere ayarlayın.Uygulamanın proje dosyasında
<StaticWebAssetsEnabled>öğesinifalseolarak ayarlayarak statik web varlıklarını devre dışı bırakın. UYARI: Statik web varlıklarının devre dışı bırakılması sınıf kitaplıklarınıRazor devre dışı bırakır.Proje dosyasına aşağıdaki XML'i ekleyin:
<ItemGroup> <Content Remove="wwwroot\**" /> </ItemGroup>
Aşağıdaki kod, WebRootPath öğesini Staging değeriyle güncelleyerek, yinelenen içeriğin wwwroot-custom yerine wwwroot üzerinden dönmesini garanti eder:
var builder = WebApplication.CreateBuilder(new WebApplicationOptions
{
Args = args,
EnvironmentName = Environments.Staging,
WebRootPath = "wwwroot-custom"
});
Statik Dosya Ara Yazılımı
Statik Dosya Ara Yazılımı, statik dosyanın genellikle Statik Varlıkları Eşleme uç nokta yönlendirme kurallarına (MapStaticAssets ) ek olarak belirli statik dosya senaryolarında sunulmasını sağlar.
Statik Dosya Ara katman yazılımı, genellikle Statik Varlık Eşleme uç noktası kuralları (UseStaticFiles) eklendikten sonra uygulamanın istek işleme işlem hattında MapStaticAssets çağrıldığında istek işlemeye dahil edilir.
Static Assets Mapping uç nokta kuralları, .NET 9 veya sonraki sürümleri hedefleyen uygulamalarda kullanılır. Statik Dosya Ara Yazılımı, .NET 9'dan önceki .NET sürümlerini hedefleyen uygulamalarda kullanılmalıdır.
Statik Dosya Ara Yazılımı statik dosyalara hizmet eder, ancak Statik Varlıkları Eşleme uç noktası kurallarıyla aynı iyileştirme düzeyini sağlamaz. Statik Varlıkları Eşleme uç noktası kurallarının derleme zamanı sıkıştırma ve parmak izi oluşturma özellikleri yalnızca Statik Dosya Ara Yazılımı'na bağlıyken kullanılamaz.
Uç nokta kuralları, uygulamanın çalışma zamanında bilgi sahibi olduğu varlıklara hizmet etmek için iyileştirilmiştir. Uygulama disk veya ekli kaynaklar gibi diğer konumlardan varlıklara hizmet verirse Statik Dosya Ara Yazılımı kullanılmalıdır.
Bu makalede ele alınan aşağıdaki özellikler Statik Dosya Ara Yazılımı ile desteklenir ancak Statik Varlıkları Eşleme uç noktası kurallarıyla desteklenmez:
- Dosyaları web kök dizini dışında sunma
- HTTP yanıt üst bilgilerini ayarlama
- Diskten veya ekli kaynaklardan veya diğer konumlardan dosya sunma
- Dizine gözatma
- Varsayılan belgeleri sunma
- Statik dosyaları, varsayılan belgeleri ve dizine gözatmayı birleştirme
- Dosya uzantılarını MIME türleriyle eşleme
- Standart olmayan içerik türleri sunma
"Web kök dizininin dışından dosya sunma işlemi UseStaticFiles aracılığıyla gerçekleştirilebilir."
adlı bir klasörde uygulamanın ExtraStaticFiles dışında yer alan statik dosyalar içeren aşağıdaki dizin hiyerarşisini göz önünde bulundurun:
wwwrootcssimagesjs
ExtraStaticFilesimagesred-rose.jpg
Bir istek, Statik Dosya Orta Katman Yazılımının yeni bir örneğini yapılandırarak red-rose.jpg’ye erişebilir.
Aşağıdaki API için ad alanları:
using Microsoft.Extensions.FileProviders;
(.NET 9 veya üzeri) veya (.NET 8 veya daha önceki) MapStaticAssets mevcut çağrıdan UseStaticFiles sonra istek işleme işlem hattında:
app.UseStaticFiles(new StaticFileOptions
{
FileProvider = new PhysicalFileProvider(
Path.Combine(builder.Environment.ContentRootPath, "ExtraStaticFiles")),
RequestPath = "/static-files"
});
Yukarıdaki kodda, ExtraStaticFiles dizin hiyerarşisi static-files URL bölümü aracılığıyla genel olarak kullanıma sunulur. Ana bilgisayarın https://{HOST}/StaticFiles/images/red-rose.jpg olduğu adrese bir istek gönderilir ve bu istek {HOST} dosyasını sunar.
Aşağıdaki işaretleme ExtraStaticFiles/images/red-rose.jpg kaynağına başvurmaktadır:
<img src="static-files/images/red-rose.jpg" alt="A red rose" />
Önceki örnekte, tilde-slash gösterimi Razor Sayfalar ve MVC görünümlerinde (src="~/StaticFiles/images/red-rose.jpg") desteklenirken, Razor uygulamalarındaki Blazor bileşenler için desteklenmez.
Dosyaları birden çok konumdan sunma
Bu bölümdeki yönergeler Sayfalar ve MVC uygulamaları için Razor geçerlidir. Blazor Web App için geçerli olan yönergeler için bkz. ASP.NET Core Blazor statik dosyaları.
Şirket logosu gösteren aşağıdaki işaretlemeyi göz önünde bulundurun:
<img src="~/logo.png" asp-append-version="true" alt="Company logo">
Geliştirici, Görüntü Etiketi Yardımcısı'nı kullanarak bir sürüm eklemeyi ve dosyayı özel bir konumdaki ExtraStaticFiles adlı klasörden sunmayı planlıyor.
Aşağıdaki örnek, dosyaları `MapStaticAssets`'den sunmak için `wwwroot` ve dosyaları `UseStaticFiles`'ten sunmak için `ExtraStaticFiles` çağrılarını yapar.
(.NET 9 veya üzeri) veya (.NET 8 veya daha önceki) MapStaticAssets mevcut çağrıdan UseStaticFiles sonra istek işleme işlem hattında:
app.UseStaticFiles(new StaticFileOptions
{
FileProvider = new PhysicalFileProvider(
Path.Combine(builder.Environment.ContentRootPath, "ExtraStaticFiles"))
});
Aşağıdaki örnek, hem UseStaticFiles hem de wwwroot'den dosya sunmak için ExtraStaticFiles'yi iki kez çağırır.
Mevcut UseStaticFiles çağrısından sonra istek işleme hattında:
app.UseStaticFiles(new StaticFileOptions
{
FileProvider = new PhysicalFileProvider(
Path.Combine(builder.Environment.ContentRootPath, "ExtraStaticFiles"))
});
Yukarıdaki kod ExtraStaticFiles/logo.png kullanılarak dosya görüntülenir. Ancak, Görüntü Etiketi Yardımcısı (AppendVersion) uygulanmaz çünkü Etiket Yardımcısı, WebRootFileProvider klasörünü içerecek şekilde güncellenmemiş olan ExtraStaticFiles'ya bağlıdır.
Aşağıdaki kod, WebRootFileProvider öğesini, bir ExtraStaticFiles kullanarak CompositeFileProvider klasörünü içerecek şekilde günceller. Bu, Image Tag Helper'ın ExtraStaticFiles klasöründeki görüntülere bir versiyon uygulamasına olanak tanır.
Aşağıdaki API için ad alanı:
using Microsoft.Extensions.FileProviders;
Mevcut MapStaticAssets (.NET 9 veya üzeri) veya UseStaticFiles (.NET 8 veya öncesi) çağrısından önceki istek işleme işlem hattında:
var webRootProvider = new PhysicalFileProvider(builder.Environment.WebRootPath);
var newPathProvider = new PhysicalFileProvider(
Path.Combine(builder.Environment.ContentRootPath, "ExtraStaticFiles"));
var compositeProvider = new CompositeFileProvider(webRootProvider, newPathProvider);
app.Environment.WebRootFileProvider = compositeProvider;
UseStaticFiles ve UseFileServer varsayılan olarak wwwroot öğesini gösteren dosya sağlayıcısına ayarlanır. Ek UseStaticFiles ve UseFileServer örnekleri, diğer konumlardan dosyaları sunmak için diğer dosya sağlayıcıları ile sağlanabilir. Daha fazla bilgi için, wwwroot için UseFileServer ile birlikte UseStaticFiles hâlâ gerekli (dotnet/AspNetCore.Docs #15578)'ye bakın.
HTTP yanıt üst başlıklarını ayarla
HTTP yanıt üst bilgilerini ayarlamak için StaticFileOptions kullanın. Statik Dosya Ara Yazılımını statik dosyalara hizmet edecek şekilde yapılandırmaya ek olarak, aşağıdaki kod üst bilgiyi 604.800 saniye (bir hafta) olarak ayarlarCache-Control.
Aşağıdaki API için ad alanları:
using Microsoft.AspNetCore.Http;
(.NET 9 veya üzeri) veya (.NET 8 veya daha önceki) MapStaticAssets mevcut çağrıdan UseStaticFiles sonra istek işleme işlem hattında:
app.UseStaticFiles(new StaticFileOptions
{
OnPrepareResponse = ctx =>
{
ctx.Context.Response.Headers.Append(
"Cache-Control", "public, max-age=604800");
}
});
Büyük varlık koleksiyonu
Yaklaşık 1.000 veya daha fazla varlık olarak kabul edilen büyük varlık koleksiyonlarıyla ilgilenirken, uygulama tarafından sunulan son varlık sayısını azaltmak veya MapStaticAssets ile UseStaticFiles'i birleştirmek için bir paketleyici kullanmanızı öneririz.
MapStaticAssets sıkıştırma, önbelleğe alma ve parmak izi oluşturmayı desteklemek amacıyla kaynaklar için derleme işlemi sırasında yakalanan önceden derlenmiş meta verileri hevesle yükler. Bu özellikler, uygulama tarafından daha fazla bellek kullanımına neden olur. Sık erişilen varlıklar için genellikle maliyetlere değer. Sık erişilmeyen varlıklar için, ödün maliyetlere değmeyebilir.
Paketleme kullanmıyorsanız, MapStaticAssets ile UseStaticFiles'i birleştirmenizi öneririz. Aşağıdaki örnekte yaklaşımı gösterilmektedir.
Proje dosyasında (.csproj), StaticWebAssetEndpointExclusionPattern için son bildirimdeki uç noktaları filtrelemek amacıyla MapStaticAssets MSBuild özelliği kullanılır.
UseStaticFiles tarafından sunulan dışlanan dosyalar, sıkıştırma, önbelleğe alma ve parmak izi alma avantajlarından yararlanmaz.
Değerini StaticWebAssetEndpointExclusionPattern ayarlarken, çerçevenin varsayılan dışlama desenini korumak için $(StaticWebAssetEndpointExclusionPattern) saklayın. Noktalı virgülle ayrılmış listeye ek desenler ekleyin.
Aşağıdaki örnekte, dışlama patten simgelerden oluşan varsayımsal bir toplu işlemi temsil eden statik dosyaları lib/icons klasörüne ekler:
<StaticWebAssetEndpointExclusionPattern>
$(StaticWebAssetEndpointExclusionPattern);lib/icons/**
</StaticWebAssetEndpointExclusionPattern>
HTTPS Yeniden Yönlendirme Ara Yazılımı (app.UseHttpsRedirection();) dosyada işlendikten Program sonra:
-
UseStaticFiles dışlanan dosyaları (
lib/icons/**) ve MapStaticAssets kapsamında olmayan diğer dosyaları işlemek için çağırın. - Önemli uygulama dosyalarını (CSS, MapStaticAssets, görüntüler) işlemek için UseStaticFiles sonrasında JS çağırın.
app.UseStaticFiles();
app.UseAuthorization();
app.MapStaticAssets();
Statik dosya yetkilendirme
Bir uygulama geri dönüş yetkilendirme ilkesi benimsediğinde, Yetkilendirme Ara Yazılımı istekleri işledikten sonra statik dosyalara yönelik istekler de dahil olmak üzere açıkça bir yetkilendirme ilkesi belirtmeyen tüm istekler için yetkilendirme gerekir. Statik dosyalar için uç nokta oluşturucusna uygulayarak AllowAnonymousAttribute statik dosyalara anonim erişime izin verin:
app.MapStaticAssets().Add(endpointBuilder =>
endpointBuilder.Metadata.Add(new AllowAnonymousAttribute()));
Bir uygulama geri dönüş yetkilendirme ilkesi benimsediğinde, Yetkilendirme Ara Yazılımı istekleri işledikten sonra statik dosyalara yönelik istekler de dahil olmak üzere açıkça bir yetkilendirme ilkesi belirtmeyen tüm istekler için yetkilendirme gerekir. ASP.NET Core şablonları, UseStaticFiles çağrısından önce UseAuthorization çağrısını yaparak statik dosyalara anonim erişim sağlar. Çoğu uygulama bu deseni izler. Statik Dosya Ara Yazılımı yetkilendirme ara yazılımından önce çağrıldığında:
- Statik dosyalarda yetkilendirme denetimi yapılmaz.
- Statik Dosya Ara Yazılımı tarafından sunulan, genellikle
wwwrootolan web kökü gibi statik dosyalara herkese açık erişim sağlanır.
Yetkilendirmeye dayalı statik dosyalar sunmak için:
- Uygulamanın geri dönüş yetkilendirme ilkesini kimliği doğrulanmış kullanıcılar gerektirecek şekilde ayarladığını onaylayın.
- Statik dosyayı uygulamanın web kökünün dışında depolayın.
- çağrısı UseAuthorization'ndan sonra, web kökünün dışındaki statik dosyalar klasörünün yolunu belirterek UseStaticFiles çağrısını yapın.
Aşağıdaki API için ad alanları:
using Microsoft.AspNetCore.Authorization;
using Microsoft.Extensions.FileProviders;
Hizmet kaydı:
builder.Services.AddAuthorization(options =>
{
options.FallbackPolicy = new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.Build();
});
UseAuthorization çağrısından sonra istek işleme hattında:
app.UseStaticFiles(new StaticFileOptions
{
FileProvider = new PhysicalFileProvider(
Path.Combine(builder.Environment.ContentRootPath, "SecureStaticFiles")),
RequestPath = "/static-files"
});
Aşağıdaki API için ad alanları:
using Microsoft.AspNetCore.Authorization;
using Microsoft.Extensions.FileProviders;
Startup.ConfigureServices'da:
services.AddAuthorization(options =>
{
options.FallbackPolicy = new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.Build();
});
Startup.Configure içindeki UseAuthorization çağrısından sonra:
app.UseStaticFiles(new StaticFileOptions
{
FileProvider = new PhysicalFileProvider(
Path.Combine(env.ContentRootPath, "SecureStaticFiles")),
RequestPath = "/static-files"
});
Önceki kodda, geri dönüş yetkilendirme ilkesi kimliği doğrulanmış kullanıcılar gerektirir. Kendi yetkilendirme gereksinimlerini belirten denetleyiciler ve Razor Sayfalar gibi uç noktalar geri dönüş yetkilendirme ilkesini kullanmaz. Örneğin, Razor Sayfalar, denetleyiciler veya eylem yöntemleri, yedek yetkilendirme ilkesi yerine uygulanan yetkilendirme özniteliğini kullanır.
RequireAuthenticatedUser, geçerli kullanıcı kimliğinin doğrulandığını zorlayan geçerli örneğe DenyAnonymousAuthorizationRequirement ekler.
Varsayılan Statik Dosya Ara Yazılımı (UseStaticFiles) öncesinde UseAuthorizationçağrıldığından, uygulamanın web kökünde depolanan statik varlıklara genel erişim sağlanır. Klasördeki SecureStaticFiles statik varlıklar kimlik doğrulaması gerektirir.
Dosyaları yetkilendirmeye göre sunmak için alternatif bir yaklaşım:
- Dosyaları web kökünün ve Statik Dosya Ara Yazılımı tarafından erişilebilen herhangi bir dizinin dışında depolayın.
- Yetkilendirmenin uygulandığı bir eylem yöntemi aracılığıyla dosyaları sunma ve bir FileResult nesne döndürme.
Razor sayfasından (Pages/BannerImage.cshtml.cs):
public class BannerImageModel : PageModel
{
private readonly IWebHostEnvironment _env;
public BannerImageModel(IWebHostEnvironment env) => _env = env;
public PhysicalFileResult OnGet()
{
var filePath = Path.Combine(
_env.ContentRootPath, "SecureStaticFiles", "images", "red-rose.jpg");
return PhysicalFile(filePath, "image/jpeg");
}
}
Bir denetleyiciden (Controllers/HomeController.cs):
[Authorize]
public IActionResult BannerImage()
{
var filePath = Path.Combine(
_env.ContentRootPath, "SecureStaticFiles", "images", "red-rose.jpg");
return PhysicalFile(filePath, "image/jpeg");
}
Yukarıdaki yaklaşım, dosya başına bir sayfa veya uç nokta gerektirir.
Aşağıdaki yol uç noktası örneği, kimliği doğrulanmış kullanıcılar için dosyaları döndürür.
Program dosyasında:
builder.Services.AddAuthorization(options =>
{
options.AddPolicy("AuthenticatedUsers", b => b.RequireAuthenticatedUser());
});
...
app.MapGet("/files/{fileName}", IResult (string fileName) =>
{
var filePath = GetOrCreateFilePath(fileName);
if (File.Exists(filePath))
{
return TypedResults.PhysicalFile(filePath, fileName);
}
return TypedResults.NotFound("No file found with the supplied file name");
})
.WithName("GetFileByName")
.RequireAuthorization("AuthenticatedUsers");
Aşağıdaki yol uç noktası örneği, yönetici rolünde ("admin") kimliği doğrulanmış kullanıcıların dosyalarını karşıya yükler.
Program dosyasında:
builder.Services.AddAuthorization(options =>
{
options.AddPolicy("AdminsOnly", b => b.RequireRole("admin"));
});
...
// IFormFile uses memory buffer for uploading. For handling large
// files, use streaming instead. See the *File uploads* article
// in the ASP.NET Core documentation:
// https://learn.microsoft.com/aspnet/core/mvc/models/file-uploads
app.MapPost("/files", async (IFormFile file, LinkGenerator linker,
HttpContext context) =>
{
// Don't rely on the value in 'file.FileName', as it's only metadata that can
// be manipulated by the end-user. Consider the 'Utilities.IsFileValid' method
// that takes an 'IFormFile' and validates its signature within the
// 'AllowedFileSignatures'.
var fileSaveName = Guid.NewGuid().ToString("N") +
Path.GetExtension(file.FileName);
await SaveFileWithCustomFileName(file, fileSaveName);
context.Response.Headers.Append("Location", linker.GetPathByName(context,
"GetFileByName", new { fileName = fileSaveName}));
return TypedResults.Ok("File Uploaded Successfully!");
})
.RequireAuthorization("AdminsOnly");
Startup.ConfigureServices'da:
services.AddAuthorization(options =>
{
options.AddPolicy("AuthenticatedUsers", b => b.RequireAuthenticatedUser());
});
Startup.Configure'da:
app.MapGet("/files/{fileName}", IResult (string fileName) =>
{
var filePath = GetOrCreateFilePath(fileName);
if (File.Exists(filePath))
{
return TypedResults.PhysicalFile(filePath, fileName);
}
return TypedResults.NotFound("No file found with the supplied file name");
})
.WithName("GetFileByName")
.RequireAuthorization("AuthenticatedUsers");
Yönetici rolündeki ("admin") kimliği doğrulanmış kullanıcılar için aşağıdaki kod dosyaları yükleyecek.
Startup.ConfigureServices'da:
services.AddAuthorization(options =>
{
options.AddPolicy("AdminsOnly", b => b.RequireRole("admin"));
});
Startup.Configure'da:
// IFormFile uses memory buffer for uploading. For handling large
// files, use streaming instead. See the *File uploads* article
// in the ASP.NET Core documentation:
// https://learn.microsoft.com/aspnet/core/mvc/models/file-uploads
app.MapPost("/files", async (IFormFile file, LinkGenerator linker,
HttpContext context) =>
{
// Don't rely on the value in 'file.FileName', as it's only metadata that can
// be manipulated by the end-user. Consider the 'Utilities.IsFileValid' method
// that takes an 'IFormFile' and validates its signature within the
// 'AllowedFileSignatures'.
var fileSaveName = Guid.NewGuid().ToString("N") +
Path.GetExtension(file.FileName);
await SaveFileWithCustomFileName(file, fileSaveName);
context.Response.Headers.Append("Location", linker.GetPathByName(context,
"GetFileByName", new { fileName = fileSaveName}));
return TypedResults.Ok("File Uploaded Successfully!");
})
.RequireAuthorization("AdminsOnly");
Dizine gözatma
Dizin gözatma, belirtilen dizinler içinde dizin listelemeye izin verir.
Dizine gözatma, güvenlik nedeniyle varsayılan olarak devre dışıdır. Daha fazla bilgi için bkz . Statik dosyalar için güvenlikle ilgili dikkat edilmesi gerekenler.
Aşağıdaki API ile dizine gözatmayı etkinleştirin:
Aşağıdaki örnekte:
- Uygulamanın kökündeki bir
imagesklasörde dizin taraması için görüntüler bulunur. - Resimlere göz atmak için istek yolu şeklindedir
/DirectoryImages. - UseStaticFiles öğesini çağırmak ve FileProvider öğesini StaticFileOptions üzerinde ayarlamak, tek tek dosyalar için tarayıcı bağlantılarının görüntülenmesini sağlar.
Aşağıdaki API için ad alanları:
using Microsoft.AspNetCore.StaticFiles;
using Microsoft.Extensions.FileProviders;
Hizmet kaydı:
builder.Services.AddDirectoryBrowser();
(.NET 9 veya üzeri) veya (.NET 8 veya daha önceki) MapStaticAssets mevcut çağrıdan UseStaticFiles sonra istek işleme işlem hattında:
var fileProvider = new PhysicalFileProvider(
Path.Combine(builder.Environment.WebRootPath, "images"));
var requestPath = "/DirectoryImages";
app.UseStaticFiles(new StaticFileOptions
{
FileProvider = fileProvider,
RequestPath = requestPath
});
app.UseDirectoryBrowser(new DirectoryBrowserOptions
{
FileProvider = fileProvider,
RequestPath = requestPath
});
Aşağıdaki API için ad alanları:
using Microsoft.Extensions.FileProviders;
using System.IO;
Startup.ConfigureServices'da:
services.AddDirectoryBrowser();
Mevcut Startup.Configurearama UseStaticFiles çağrısından sonra:
app.UseStaticFiles(new StaticFileOptions
{
FileProvider = new PhysicalFileProvider(
Path.Combine(env.WebRootPath, "images")),
RequestPath = "/DirectoryImages"
});
app.UseDirectoryBrowser(new DirectoryBrowserOptions
{
FileProvider = new PhysicalFileProvider(
Path.Combine(env.WebRootPath, "images")),
RequestPath = "/DirectoryImages"
});
Yukarıdaki kod, wwwroot/images yer tutucusunun ana bilgisayar olduğu ve https://{HOST}/DirectoryImages URL'si kullanılarak {HOST} klasörüne her dosya ve klasöre bağlantılar içeren dizin gözatmasını sağlar.
AddDirectoryBrowser , dahil olmak üzere HtmlEncoderDizin Gözatma Ara Yazılımının gerektirdiği hizmetleri ekler. Bu hizmetler diğer çağrılarla, örneğin AddRazorPages, eklenebilir, ancak hizmetlerin eklendiğinden emin olmak için AddDirectoryBrowser aramanızı yapmanızı öneriyoruz.
Varsayılan belgeleri sunma
Varsayılan sayfayı ayarlamak, ziyaretçilere sitede bir başlangıç noktası sağlar.
wwwroot içermeden istek URL'sinden varsayılan bir dosya sunmak için UseDefaultFiles yöntemini çağırın.
UseDefaultFiles , dosyaya hizmet içermeyen bir URL yeniden yazma işlemidir. İstek işleme işlem hattında, mevcut MapStaticAssets (.NET 9 veya üzeri) veya UseStaticFiles (.NET 8 veya öncesi) çağrısından önce:
app.UseDefaultFiles();
UseDefaultFiles ile wwwroot klasörüne yapılan istek, aşağıdakiler için arama yapar:
default.htmdefault.htmlindex.htmindex.html
Listeden bulunan ilk dosya, istek dosyanın adını içeriyormuş gibi sunulur. Tarayıcı URL'si istenen URI'yi yansıtmaya devam eder.
Aşağıdaki kod, varsayılan dosya adını olarak default-document.htmldeğiştirir:
var options = new DefaultFilesOptions();
options.DefaultFileNames.Clear();
options.DefaultFileNames.Add("default-document.html");
app.UseDefaultFiles(options);
Statik dosyaları, varsayılan belgeleri ve dizine gözatmayı birleştirme
UseFileServer, UseStaticFiles, UseDefaultFiles ve isteğe bağlı olarak UseDirectoryBrowser işlevlerini birleştirir.
Mevcut .NET 9 veya üzeri MapStaticAssets veya .NET 8 veya öncesi UseStaticFiles çağrısından sonra istek işleme işlem hattında, statik dosyaların ve varsayılan dosyanın sunulmasını etkinleştirmek için UseFileServer çağrısı yapın.
app.UseFileServer();
Dizine gözatma, önceki örnekte etkin değildir.
Aşağıdaki kod statik dosyaların, varsayılan dosyanın ve dizin taramanın sunulmasını sağlar.
Hizmet kaydı:
builder.Services.AddDirectoryBrowser();
Mevcut UseStaticFiles çağrısından sonra istek işleme hattında:
app.UseFileServer(enableDirectoryBrowsing: true);
Startup.ConfigureServices'da:
services.AddDirectoryBrowser();
Mevcut Startup.Configurearama UseStaticFiles çağrısından sonra:
app.UseFileServer(enableDirectoryBrowsing: true);
Ana bilgisayar adresi ()/ için, UseFileServer varsayılan Sayfa () veya varsayılan MVC görünümünden (RazorPages/Index.cshtml) önceki varsayılan Home/Index.cshtml HTML belgesini döndürür.
Aşağıdaki dizin hiyerarşisini göz önünde bulundurun:
wwwrootcssimagesjs
ExtraStaticFilesimageslogo.png
default.html
Aşağıdaki kod statik dosyaların sunulmasını, varsayılan dosyanın ve dizinine göz atmayı ExtraStaticFilesetkinleştirir.
Aşağıdaki API için ad alanları:
using Microsoft.Extensions.FileProviders;
Hizmet kaydı:
builder.Services.AddDirectoryBrowser();
Mevcut UseStaticFiles çağrısından sonra istek işleme hattında:
app.UseFileServer(new FileServerOptions
{
FileProvider = new PhysicalFileProvider(
Path.Combine(builder.Environment.ContentRootPath, "ExtraStaticFiles")),
RequestPath = "/static-files",
EnableDirectoryBrowsing = true
});
Aşağıdaki API için ad alanları:
using Microsoft.Extensions.FileProviders;
using System.IO;
Startup.ConfigureServices'da:
services.AddDirectoryBrowser();
Mevcut Startup.Configurearama UseStaticFiles çağrısından sonra:
app.UseFileServer(new FileServerOptions
{
FileProvider = new PhysicalFileProvider(
Path.Combine(env.ContentRootPath, "ExtraStaticFiles")),
RequestPath = "/static-files",
EnableDirectoryBrowsing = true
});
AddDirectoryBrowser, EnableDirectoryBrowsing özelliği değeri true olduğunda çağrılmalıdır.
Önceki dosya hiyerarşisini ve kodu kullanarak URL'ler aşağıdaki tabloda belirtildiği gibi çözümlenir ({HOST} yer tutucu sunucu adresidir).
| URI | Yanıt dosyası |
|---|---|
https://{HOST}/static-files/images/logo.png |
ExtraStaticFiles/images/logo.png |
https://{HOST}/static-files |
ExtraStaticFiles/default.html |
Varsayılan adlı bir dosya ExtraStaticFiles dizininde yoksa, https://{HOST}/static-files dizin listesini tıklanabilir bağlantılarla, {HOST} yer tutucusu sunucu olarak döndürür.
UseDefaultFiles ve UseDirectoryBrowser, sonunda eğik çizgi olmayan hedef URI'den, sonunda eğik çizgi olan hedef URI'ye istemci tarafı yeniden yönlendirmesi gerçekleştirir. Örneğin, https://{HOST}/static-files'nun sonuna / eklenmezken https://{HOST}/static-files/'nin sonuna / eklenir.
ExtraStaticFiles dizinindeki göreli URL'ler, sonunda eğik çizgi (/) olmadan geçersizdir, ancak RedirectToAppendTrailingSlash seçeneği DefaultFilesOptions kullanıldığında geçerli olur.
Dosya uzantılarını MIME türleriyle eşleme
Note
Uygulamalar için geçerli olan yönergeler için Blazor bkz. ASP.NET Core Blazor statik dosyaları.
MIME içerik türü eşlemelerine dosya uzantısı eklemek veya değiştirmek için kullanın FileExtensionContentTypeProvider.Mappings . Aşağıdaki örnekte, bilinen MIME türlerine birkaç dosya uzantısı eşlenmiştir. Uzantı .rtf değiştirilir ve .mp4 kaldırılır:
using Microsoft.AspNetCore.StaticFiles;
using Microsoft.Extensions.FileProviders;
...
// Set up custom content types - associating file extension to MIME type
var provider = new FileExtensionContentTypeProvider();
// Add new mappings
provider.Mappings[".myapp"] = "application/x-msdownload";
provider.Mappings[".htm3"] = "text/html";
provider.Mappings[".image"] = "image/png";
// Replace an existing mapping
provider.Mappings[".rtf"] = "application/x-msdownload";
// Remove MP4 videos
provider.Mappings.Remove(".mp4");
app.UseStaticFiles(new StaticFileOptions
{
ContentTypeProvider = provider
});
Yapılandırmak için birkaç statik dosya seçeneğiniz varsa, alternatif olarak kullanarak StaticFileOptionssağlayıcıyı ayarlayabilirsiniz:
var provider = new FileExtensionContentTypeProvider();
...
builder.Services.Configure<StaticFileOptions>(options =>
{
options.ContentTypeProvider = provider;
});
app.UseStaticFiles();
Startup.Configure'da:
using Microsoft.AspNetCore.StaticFiles;
using Microsoft.Extensions.FileProviders;
using System.IO;
...
// Set up custom content types - associating file extension to MIME type
var provider = new FileExtensionContentTypeProvider();
// Add new mappings
provider.Mappings[".myapp"] = "application/x-msdownload";
provider.Mappings[".htm3"] = "text/html";
provider.Mappings[".image"] = "image/png";
// Replace an existing mapping
provider.Mappings[".rtf"] = "application/x-msdownload";
// Remove MP4 videos
provider.Mappings.Remove(".mp4");
app.UseStaticFiles(new StaticFileOptions
{
FileProvider = new PhysicalFileProvider(
Path.Combine(env.WebRootPath, "images")),
RequestPath = "/images",
ContentTypeProvider = provider
});
app.UseDirectoryBrowser(new DirectoryBrowserOptions
{
FileProvider = new PhysicalFileProvider(
Path.Combine(env.WebRootPath, "images")),
RequestPath = "/images"
});
Daha fazla bilgi için bkz. MIME içerik türleri.
Standart olmayan içerik türleri
Statik Dosya Ara Yazılımı, neredeyse 400 bilinen dosya içerik türünü anlar. Kullanıcı bilinmeyen bir dosya türüne sahip bir dosya isterse, Statik Dosya Ara Yazılımı isteği işlem hattındaki bir sonraki ara yazılıma geçirir. İsteği işleyen ara yazılım yoksa 404 Bulunamadı yanıtı döndürülür. Dizine gözatma etkinse, dizin listesinde dosyanın bağlantısı görüntülenir.
Aşağıdaki kod bilinmeyen içerik türlerinin sunulmasını sağlar ve bilinmeyen dosyayı görüntü olarak işler:
app.UseStaticFiles(new StaticFileOptions
{
ServeUnknownFileTypes = true,
DefaultContentType = "image/png"
});
Yukarıdaki kodla, bilinmeyen içerik türüne sahip bir dosya isteği görüntü olarak döndürülür.
Warning
ServeUnknownFileTypes Etkinleştirme bir güvenlik riskidir. Varsayılan olarak devre dışıdır ve kullanımı önerilmez. Dosya uzantılarını MIME türleriyle eşlemek , standart olmayan uzantılarla dosya sunmanın daha güvenli bir alternatifidir.
Özel statik dosyalar manifestosu sağlama
Eğer staticAssetsManifestPathnull ise, bildirimi bulmak için IHostEnvironment.ApplicationName kullanılır. Alternatif olarak, bildirim dosyasının tam yolunu belirtin. Göreli bir yol kullanılırsa, çerçeve dosyayı AppContext.BaseDirectory içinde arar.
Statik dosyalar için güvenlikle ilgili dikkat edilmesi gerekenler
Warning
UseDirectoryBrowser ve UseStaticFiles sırları sızdırabilir. Üretimde dizine gözatmayı devre dışı bırakmak kesinlikle önerilir.
UseStaticFiles veya UseDirectoryBrowser aracılığıyla hangi dizinlerin etkinleştirildiğini dikkatle gözden geçirin. Tüm dizin ve alt dizinleri genel olarak erişilebilir hale gelir. Genel kullanıma sunulması için uygun dosyaları gibi <content_root>/wwwrootayrılmış bir dizinde depolayın. Bu dosyaları MVC görünümlerinden, Sayfalardan, Razor yapılandırma dosyalarından vb. ayırın.
ile UseDirectoryBrowserUseStaticFiles kullanıma sunulan içerik URL'leri, temel alınan dosya sisteminin büyük/küçük harf duyarlılığına ve karakter kısıtlamalarına tabidir. Örneğin, Windows büyük/küçük harfe duyarlı değildir, ancak macOS ve Linux değildir.
IIS'de barındırılan ASP.NET Core uygulamaları, statik dosya istekleri de dahil olmak üzere tüm istekleri uygulamaya iletmek için ASP.NET Çekirdek Modülünü kullanır. IIS statik dosya işleyicisi kullanılmaz ve istekleri işleme şansı yoktur.
IIS statik dosya işleyicisini sunucu veya web sitesi düzeyinde kaldırmak için IIS Yöneticisi'nde aşağıdaki adımları tamamlayın:
- Modüller özelliğine gidin.
- Listede StaticFileModule öğesini seçin.
- Eylemler kenar çubuğunda Kaldır'a tıklayın.
Warning
IIS statik dosya işleyicisi etkinse ve ASP.NET Çekirdek Modülü yanlış yapılandırıldıysa, statik dosyalar sunulur. Örneğin, web.config dosyası dağıtılmadıysa bu gerçekleşir.
- ve
.csdahil olmak üzere.cshtmlkod dosyalarını uygulama projesinin web kökünün dışına yerleştirin. Bu nedenle uygulamanın istemci tarafı içeriğiyle sunucu tabanlı kod arasında mantıksal bir ayrım oluşturulur. Bu, sunucu tarafı kodun sızdırılmasını önler.
MSBuild özellikleri
Aşağıdaki tablolarda, statik dosyaların MSBuild özellikleri ve meta veri açıklamaları gösterilmektedir.
| Mülkiyet | Description |
|---|---|
EnableDefaultCompressedItems |
Varsayılan sıkıştırma dahil/dışlama desenlerini etkinleştirir. |
CompressionIncludePatterns |
Sıkıştırma için eklenecek dosya desenlerinin noktalı virgülle ayrılmış listesi. |
CompressionExcludePatterns |
Sıkıştırmanın dışında tutulacak dosya desenlerinin noktalı virgülle ayrılmış listesi. |
EnableDefaultCompressionFormats |
Varsayılan sıkıştırma biçimlerini (Gzip ve Brotli) etkinleştirir. |
BuildCompressionFormats |
Derleme sırasında kullanılacak sıkıştırma biçimleri. |
PublishCompressionFormats |
Yayımlama sırasında kullanılacak sıkıştırma biçimleri. |
DisableBuildCompression |
Derleme sırasında sıkıştırmayı devre dışı bırakır. |
CompressDiscoveredAssetsDuringBuild |
Derleme işlemi sırasında tespit edilen unsurları sıkıştırır. |
BrotliCompressionLevel |
Brotli algoritması için sıkıştırma düzeyi. |
StaticWebAssetBuildCompressAllAssets |
Derleme sırasında keşfedilen veya hesaplanan varlıklarla sınırlı kalmaksızın, tüm varlıkları sıkıştırır. |
StaticWebAssetPublishCompressAllAssets |
Yalnızca derleme sırasında bulunan veya hesaplanan varlıkları değil, yayımlama sırasında tüm varlıkları sıkıştırır. |
| Mülkiyet | Description |
|---|---|
StaticWebAssetBasePath |
Kitaplıktaki tüm varlıklar için temel URL yolu. |
StaticWebAssetsFingerprintContent |
Önbellek baskını için içeriğin parmak izini etkinleştirir. |
StaticWebAssetFingerprintingEnabled |
Statik web varlıkları için parmak izi özelliğini etkinleştirir. |
StaticWebAssetsCacheDefineStaticWebAssetsEnabled |
Statik web varlığı tanımları için önbelleğe almayı etkinleştirir. |
StaticWebAssetEndpointExclusionPattern |
Uç noktaları dışlamak için bir kalıp. |
| Madde grubu | Description | Meta veriler |
|---|---|---|
StaticWebAssetContentTypeMapping |
Dosya kalıplarını içerik türleri ve uç noktaların önbellek başlıkları ile eşler. |
Pattern, Cache |
StaticWebAssetFingerprintPattern |
Statik web varlıklarına önbellekleme amacıyla parmak izi uygulamak için desen tanımlar. |
Pattern, Expression |
Meta Veri Açıklamaları:
Pattern: Dosyaları eşleştirmek için kullanılan glob deseni. içinStaticWebAssetContentTypeMapping, içerik türlerini belirlemek için dosyaları eşleştirir (örneğin,*.jsJavaScript dosyaları için). içinStaticWebAssetFingerprintPattern, özel parmak izi işlemi gerektiren çok uzantılı dosyaları tanımlar (örneğin,*.lib.module.js).Cache: Eşleşen içerik türü içinCache-Controlüst bilgi değerini belirtir. Bu, tarayıcı önbelleğe alma davranışını denetler (örneğin,max-age=3600, must-revalidatemedya dosyaları için).Expression: Parmak izinin dosya adına nasıl eklendiğini tanımlar. Varsayılan değer, uzantıdan önce parmak izini ekleyen{FINGERPRINT}değeridir ve bu#[.{FINGERPRINT}]yer tutucusunu içerir.
Aşağıdaki örnek, bit eşlem dosyası desenini (.bmp) {CACHE HEADER} yer tutucusunu, parmak izine sahip olmayan uç noktalar için kullanılacak Cache-Control üst bilgiyi temsil ederek image/bmp içerik türüyle eşler.
<ItemGroup>
<StaticWebAssetContentTypeMapping Include="image/bmp" Cache="{CACHE HEADER}" Pattern="*.bmp" />
</ItemGroup>
Çalışma zamanı yapılandırma seçenekleri
Aşağıdaki tabloda çalışma zamanı yapılandırma seçenekleri açıklanmaktadır.
| Yapılandırma anahtarı | Description |
|---|---|
ReloadStaticAssetsAtRuntime |
Statik varlıkların geliştirme sırasında sıcak yeniden yüklenmesini etkinleştirir: Derleme zamanı bildirim sürümleri yerine, değiştirilen web kök dizini (wwwroot) dosyalarına hizmet eder, ETag yeniden hesaplar ve gerekirse yeniden sıkıştırır. Varsayılan olarak yalnızca bir derleme bildirimi sunulurken etkinleştirilir, aksi belirtilmedikçe. |
DisableStaticAssetNotFoundRuntimeFallback |
olduğunda true, derleme bildiriminde bulunmayan yeni eklenen dosyalara hizmet veren geri dönüş uç noktasını gizler.
false olduğunda veya olmadığında, mevcut olup olmadığı denetlenen {**path} geri dönüş (GET/HEAD) bir uyarıyı günlüğe kaydeder ve dosyaya hesaplanan ETag ile hizmet eder. |
EnableStaticAssetsDevelopmentCaching |
true olduğunda, varlık tanımlayıcılarında özgün Cache-Control üst bilgilerini korur.
false yoksa, geliştirme sırasında agresif istemci önbelleğe almayı önlemek için Cache-Control üst bilgilerini no-cache olarak yeniden yazar. |
EnableStaticAssetsDevelopmentIntegrity |
olduğunda true, varlık tanımlayıcılarında bütünlük özelliklerini korur.
false mevcutken veya yokken, geliştirme sırasında dosyalar değiştiğinde uyuşmazlıkları önlemek amacıyla herhangi bir bütünlük özelliğini kaldırır. |
Ek kaynaklar
ASP.NET Core