ASP.NET MVC framework 4.5 bundel CSS tidak berfungsi di hosting

144

Saya menjalankan Aplikasi di pelabuhan aplikasi yang ditulis dalam MVC4.

Satu bundel file css tidak berfungsi. Di komputer lokal saya dalam mode debug saya melihat kode Aplikasi dan saya melihat file. Aplikasi berfungsi seperti yang diharapkan.

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

Ketika saya mengunggah aplikasi ke Appharbor saya melihat bundel dalam kode tetapi Aplikasi tidak berfungsi.

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

Ketika saya menelusuri tautan itu di hrefI get 403 - Forbidden: Access ditolak.

Bagaimana cara mengatasi masalah ini?

Ricardo Polo Jaramillo
sumber
Tidak yakin jika Anda menyelesaikan masalah ini tetapi artikel ini memperbaiki masalah saya. stackoverflow.com/a/18474844/955831
Jason Foglia

Jawaban:

284

Dugaan saya adalah bahwa path Content/cssada pada disk di aplikasi Anda. Dalam hal ini IIS akan menangani permintaan, bukan MVC.

Pastikan jalur virtual untuk bundel (parameter konstruktor StyleBundle) tidak cocok dengan folder di sistem file.

Dari komentar:

"Suatu konvensi yang baik untuk diikuti ketika membuat bundel adalah dengan memasukkan" bundel "sebagai awalan dalam nama bundel. Ini akan mencegah kemungkinan konflik perutean."

Paul
sumber
2
Terima kasih. Apakah normal jika berfungsi saat dijalankan di localhost?
Ricardo Polo Jaramillo
3
Terima kasih atas jawaban ini - membuat saya gila!
Rich Turner
8
@ RicardoPolo, oleh "localhost", maksud Anda saat menjalankannya di iis express pada mesin pengembangan Anda? Maka ya, itu normal bahwa itu bekerja di sana karena Anda kemungkinan besar berjalan dalam mode debug, yang menonaktifkan bundling.
bvgheluwe
1
Terima kasih, ini membuat saya gila hari ini
xingyu
11
+1 Jawaban ini membantu saya memahami bagaimana jalur virtual bekerja dengan bundling. Saya membaca posting asli di msdn ( asp.net/mvc/tutorials/mvc-4/bundling-and-minification ) tetapi setelah menyelesaikan masalah saya dengan jawaban Anda, saya menemukan di akhir posting sedikit teks berbicara tentang virtual path: "Konvensi yang baik untuk diikuti saat membuat bundel adalah dengan memasukkan" bundle "sebagai awalan dalam nama bundel. Ini akan mencegah kemungkinan konflik perutean.". Saya pikir kalimat ini HARUS telah dicetak tebal dengan gambar peringatan merah / kuning. : D Terima kasih!
Samuel
45

Masalah ini secara default .NET tidak "memproses" permintaan yang memiliki ekstensi .js atau .css.

Ada dua perbaikan untuk ini (Anda hanya perlu melakukan SATU)

A) Hapus ekstensi dari nama bundel. (disarankan) Ini akan menyebabkan .NET memproses permintaan dan menjalankannya melalui BundleModule.

B) Tambahkan ini ke web.config Anda di bagian system.webServer yang akan menyebabkan .NET menjalankan permintaan .js dan .css melalui BundleModule.

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

Teriak besar kepada Ray Moro yang menemukan penyebab sebenarnya dan membagikannya kepada saya di blog saya: http://blog.cdeutsch.com/2012/11/fixing-404-errors-for-aspnet-mvc-apps.html

cdeutsch
sumber
Diperbarui dengan informasi lebih lanjut tentang akar penyebab bersama dengan opsi kedua.
cdeutsch
1
Saya mengalami masalah ini karena nama bundel saya adalah nama seperti folder yang diakhiri dengan "css". Meskipun bundel saya tidak benar-benar memiliki ekstensi file, saran A membawa saya ke masalah.
dsnunez
1
Ini seharusnya jawaban yang benar, ini membantu saya dengan masalah yang sama.
psulek
jawaban yang bagus itu membantu saya
DKR
Hal ini dengan bagian <module> yang hilang dari web.config oh man ...
XDS
19

Terjadi dengan saya juga, ketika saya mencoba menggunakan aplikasi ASP.NET MVC saya di AppHarbor.

Saya memiliki bundel stylesheet dengan nama

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

dan struktur folder itu

-- Kandungan

- Konten \ Bootstrap \ ...

Dengan hanya mengubah nama bundel ke "~/Content/bootstrap-css"masalah saya bisa diselamatkan.

Yasser Shaikh
sumber
15

Saya tahu saya terlambat 4 tahun untuk pertanyaan ini, tetapi ini berhasil bagi saya.

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

   BundleTable.EnableOptimizations = true;     // Added this           
}
Tanpa Rayuan
sumber
2
Dari semua jawaban di atas dan di bawah. Ini adalah satu-satunya yang bekerja untuk saya.
Haim Katz
3
Ini memungkinkan optimasi ketika Anda dalam mode debug. Meskipun ini adalah cara yang bagus untuk memeriksa apakah bundel bekerja pada mesin dev, Anda tidak harus meninggalkan pernyataan ini dalam kode Anda.
Rudey
9

403 kesalahan terpecahkan. di sini adalah penjelasan rinci dan solusi untuk kesalahan 403.
Solusinya ditunjukkan untuk bundel CSS. Namun itu juga berlaku untuk JavaScript.

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

Singkatnya, pastikan bahwa jalur virtual [Script | Style]Bundle("~/content/[script | css]")tidak cocok dengan folder di sistem file (misalnya C:\approot\Content\[script | css])[Script | Style]Bundle("~/content/[scriptDiff | cssDiff]")

yantaq
sumber
2
Terima kasih, ini masalah yang saya alami. Untuk mengatasinya, di BundleConfig.cs saya mengubah path dari @ Styles.Render ("~ / Content / css") menjadi @ Styles.Render ("~ / bundles / css"). Sekarang ini berfungsi ketika berjalan secara lokal dalam mode debug dan ketika diterbitkan dalam mode rilis atau debug
Ken Palmer
Jawaban yang bagus, tetapi Anda tidak boleh meninggalkan hanya tautan, setidaknya langkah-langkah dasar dari penulisan ini akan bagus untuk dimiliki di sini, seandainya situs web tertaut mati.
Vitor M. Barbosa
5

Saya memecahkan masalah dengan menambahkan baris kode di bawah ini di kelas BundleConfig

BundleTable.EnableOptimizations = false;
Kamu tidak
sumber
3

Apa yang saya lakukan sangat sederhana,

Saya menambahkan "js" di akhir ScriptBundle seperti: new ScriptBundle ("~ / bundles / appjs") Dan saya menambahkan "css" di akhir StyleBundle seperti: new StyleBundle ("~ / content / appcss")

Nama folder saya tidak pernah berakhir dengan "js" atau "css".

Itu harus dilakukan.

abelabbesnabi
sumber
2

Ini juga berlaku untuk 'kelas ScriptBundle', pastikan bahwa 'nama parameter' untuk konstruktor tidak cocok dengan jalur di sistem file aplikasi web. Ingat bahwa IIS akan mencoba menyajikan file / permintaan.

William
sumber
1

Masalahnya juga bisa berasal dari file yang dienkripsi. Ini terjadi pada saya ketika saya mengunduh BootStrap dan menggunakan file yang disediakan. Mereka menunjukkan hijau di Windows explorer dan bekerja dengan baik di Visual Studio, tetapi ketika digunakan, saya mendapat kesalahan 403.

Anda dapat melihat apakah mereka dienkripsi dengan masuk ke properti, lalu properti lanjut dan ada kotak centang terenkripsi.

Hapus centang dan itu tidak akan lagi menjadi masalah.

Greg Gum
sumber
0

Saya memiliki masalah yang sama dengan kesalahan (403 Forbidden) itu. Dalam kasus saya alasannya adalah server proxy di organisasi saya memblokir file css saya. Nama file Css cocok dengan salah satu aturan blokir.

Konstantin Orlov
sumber
0

Saya menemukan file bootstrap.css tidak ada di folder konten, jadi saya mencarinya di paket dan disisipkan di sana .. itu berhasil!

Majid ALSarra
sumber