ASP.NET MVC framework 4.5 CSS paketi barındırmada çalışmıyor


145

MVC4 ile yazılmış bir uygulama limanında bir Uygulama çalıştırıyorum.

Bir css dosyası paketi çalışmıyor. Yerel bilgisayarımda hata ayıklama modunda Uygulamanın kodunu ve dosyaları görüyorum. Uygulama beklendiği gibi çalışıyor.

<link href="/Content/css/home/basic-jquery-slider.css" rel="stylesheet"/>
<link href="/Content/css/home/Home.css" rel="stylesheet"/>

Uygulamayı Appharbor'a yüklediğimde kodda paketi görüyorum ama Uygulama çalışmıyor.

<link href="/Content/css/home?v=zhVOIpUNuvCOZhJyBcQWpMlozayor4te6k-pM29wHqI1" rel="stylesheet"/>

Ben bu bağlantıyı göz attıklarında hrefalıyorum 403 - Yasak: erişim engellendi.

Bunu nasıl giderebilirim?


Bu sorunu çözüp çözmediğinizden emin değilim ama bu makale benimkini düzeltti. stackoverflow.com/a/18474844/955831
Jason Foglia

Yanıtlar:


285

Tahminimce yol Content/cssuygulamanızdaki diskte var. Bu durumda, isteği MVC yerine IIS ele alacaktır.

Paketin sanal yolunun (StyleBundle yapıcısının parametresi) dosya sistemindeki bir klasörle eşleşmediğinden emin olun.

Yorumlardan:

"Paket oluştururken izlenecek iyi bir kural, paket adına" paket "i önek olarak eklemektir. Bu, olası bir yönlendirme çakışmasını önleyecektir."


2
Teşekkürler. Localhost'ta çalışırken çalışması normal mi?
Ricardo Polo Jaramillo

3
Bu cevap için Thnaks - beni delirtiyordu!
Rich Turner

8
@RicardoPolo, "localhost" derken, onu geliştirme makinenizde iis express üzerinde çalıştırırken mi demek istiyorsunuz? O zaman evet, orada çalışması normaldir çünkü büyük olasılıkla hata ayıklama modunda çalışıyorsunuz, bu da paketlemeyi devre dışı bırakır.
bvgheluwe

1
Teşekkürler, bu bugün beni deli
ediyordu

11
+1 Bu cevap, sanal yolların gruplamayla nasıl çalıştığını anlamama yardımcı oluyor. Orijinal gönderiyi msdn'de okudum ( asp.net/mvc/tutorials/mvc-4/bundling-and-minification ), ancak sorunumu cevabınızla çözdükten sonra, yazının sonunda sanaldan bahseden bir metin buldum yol: "Paketler oluştururken izlenecek iyi bir kural, paket adına" paket "i önek olarak eklemektir. Bu, olası bir yönlendirme çakışmasını önleyecektir." Sanırım bu cümle, kırmızı / sarı bir uyarı resmiyle kalın yazılmalıdır. : D Teşekkür ederim!
Samuel

45

Bu sorun, varsayılan olarak .NET'in .js veya .css uzantılı istekleri "işlememesidir".

Bunun için iki düzeltme var (yalnızca BİR tane yapmanız gerekir)

A) Uzantıları paket adlarından kaldırın. (önerilir) Bu, .NET'in isteği işlemesine ve BundleModule aracılığıyla çalıştırmasına neden olur.

B) Bunu , .NET'in BundleModule aracılığıyla .js ve .css isteklerini çalıştırmasına neden olacak system.webServer bölümündeki web.config dosyanıza ekleyin.

<modules runAllManagedModulesForAllRequests="true">
  <remove name="BundleModule" />
  <add name="BundleModule" type="System.Web.Optimization.BundleModule" />
</modules>

Asıl nedeni bulan ve blogumda benimle paylaşan Ray Moro'ya büyük bir sesle: http://blog.cdeutsch.com/2012/11/fixing-404-errors-for-aspnet-mvc-apps.html


İkinci bir seçenekle birlikte temel neden hakkında daha fazla bilgi ile güncellendi.
cdeutsch

1
Bu sorunu yaşıyordum çünkü paketimin adı "css" ile biten klasör benzeri bir addı. Paketim tam olarak bir dosya genişletmesine sahip olmasa da, A önerisi beni soruna götürdü.
dsnunez

1
Bu doğru cevap olmalı, aynı problemde bana yardımcı oluyor.
psulek

harika cevap bana yardımcı oluyor
DKR

Web.config'den eksik <module> bölümü olan bu şey oh man ...
XDS

19

ASP.NET MVC uygulamamı AppHarbor'da dağıtmayı denediğimde benimle de oldu.

Adında bir stil sayfası paketim vardı

@Styles.Render("~/Content/bootstrap")

ve klasör yapısı

- İçerik

- İçerik \ Önyükleme \ ...

Yalnızca paket adını "~/Content/bootstrap-css"sorunum olarak değiştirerek yeniden ele alındı.


15

Bu soruya 4 yıl geç kaldığımı biliyorum ama bu benim için çalıştı.

public static void RegisterBundles(BundleCollection bundles)
{
   ...

   BundleTable.EnableOptimizations = true;     // Added this           
}

2
Yukarıdaki ve aşağıdaki tüm cevapların. Bu benim için çalışan tek kişi.
Haim Katz

3
Bu, hata ayıklama modundayken optimizasyonları etkinleştirir. Bu, paketlerin bir geliştirme makinesinde çalışıp çalışmadığını kontrol etmenin harika bir yolu olsa da, bu ifadeyi kodunuzda bırakmamalısınız.
Rudey

9

403 hatası çözüldü. 403 hatası için ayrıntılı bir açıklama ve çözüm burada.
Çözüm , CSS paketi için gösterilmiştir. Ancak JavaScript için de geçerlidir.

http://www.mvccentral.net/Story/Details/articles/kahanu/stylebundle-403-error-solved

Özetle, sanal yolun [Script | Style]Bundle("~/content/[script | css]")dosya sistemindeki bir klasörle eşleşmediğinden emin olun (ör. C:\approot\Content\[script | css])[Script | Style]Bundle("~/content/[scriptDiff | cssDiff]")


2
Teşekkürler, yaşadığım sorun bu. Bunu çözmek için BundleConfig.cs'de @ Styles.Render ("~ / Content / css") olan yolu @ Styles.Render ("~ / bundles / css") olarak değiştirdim. Artık hata ayıklama modunda yerel olarak çalışırken ve yayın veya hata ayıklama modunda yayınlandığında çalışıyor.
Ken Palmer

Güzel cevap, ancak yalnızca bir bağlantı bırakmamalısınız, en azından bu yazının temel adımları, bağlantılı web sitesi çalışmadığında burada olması harika olur.
Vitor M. Barbosa

5

BundleConfig sınıfına aşağıdaki kod satırını ekleyerek sorunu çözdüm

BundleTable.EnableOptimizations = false;

3

Yaptığım şey çok basit

ScriptBundle'ın sonuna şu şekilde "js" ekliyorum: new ScriptBundle ("~ / bundles / appjs") Ve StyleBundle'ın sonuna şu şekilde "css" ekliyorum: new StyleBundle ("~ / content / appcss")

Klasör isimlerim asla "js" veya "css" ile bitmiyor.

Bunu yapmalı.


2

Bu, 'ScriptBundle sınıfı' için de geçerlidir, kurucuya yönelik 'parametre adı'nın web uygulaması dosya sistemindeki bir yolla eşleşmediğinden emin olun. IIS'nin dosyayı / isteği sunmaya çalışacağını unutmayın.


1

Sorun, şifrelenen dosyadan da kaynaklanabilir. Bu, BootStrap'i indirdiğimde ve verilen dosyaları kullandığımda başıma geldi. Windows gezgininde yeşil gösterdiler ve Visual Studio'da iyi çalıştılar, ancak dağıtıldığında bir 403 hatası aldım.

Özelliklere, ardından gelişmiş özelliklere giderek şifrelenip şifrelenmediklerini görebilirsiniz ve şifreli bir onay kutusu vardır.

İşaretini kaldırın ve artık sorun olmayacak.


0

O (403 Yasak) hatasıyla aynı sorunu yaşıyorum. Benim durumumda nedeni, kuruluşumdaki proxy sunucusunun css dosyamı engellemesi. Css dosya adı, blok kurallarından biriyle eşleşiyor.


0

Bootstrap.css dosyasının içerik klasöründe olmadığını öğrendim, bu yüzden onu paketlerde aradım ve oraya yapıştırdım .. işe yaradı!

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.