Pakiet CSS ASP.NET MVC Framework 4.5 nie działa na hostingu


144

Używam aplikacji na port aplikacji napisanej w MVC4.

Pakiet plików css nie działa. Na moim komputerze lokalnym w trybie debugowania widzę kod aplikacji i widzę pliki. Aplikacja działa zgodnie z oczekiwaniami.

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

Kiedy przesyłam aplikację do Appharbor, widzę pakiet w kodzie, ale aplikacja nie działa.

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

Kiedy przeglądam ten link w hrefI get 403 - Forbidden: Access is denied.

Jak rozwiązać ten problem?


Nie jestem pewien, czy rozwiązałeś ten problem, ale ten artykuł rozwiązał mój. stackoverflow.com/a/18474844/955831
— Jason Foglia

Odpowiedzi:


284

Domyślam się, że ścieżka Content/css istnieje na dysku w Twojej aplikacji. W takim przypadku to usługi IIS będą obsługiwać żądanie, a nie MVC.

Upewnij się, że ścieżka wirtualna pakietu (parametr konstruktora StyleBundle) nie jest zgodna z folderem w systemie plików.

Z komentarzy:

„Dobrą konwencją podczas tworzenia pakietów jest dołączenie„ pakietu ”jako prefiksu w nazwie pakietu. Zapobiegnie to ewentualnemu konfliktowi routingu.”


2
dzięki. Czy to normalne, że działa, gdy jest uruchamiany na hoście lokalnym?
— Ricardo Polo Jaramillo

3
Dziękuję za tę odpowiedź - doprowadzała mnie do szału!
— Rich Turner,

8
@RicardoPolo, przez "localhost", czy masz na myśli uruchamianie go w iis express na twojej maszynie deweloperskiej? Więc tak, to normalne, że tam działa, ponieważ najprawdopodobniej pracujesz w trybie debugowania, który wyłącza sprzedaż wiązaną.
— bvgheluwe

1
Dziękuję, doprowadzało mnie to dzisiaj do szaleństwa
— xingyu

11
+1 Ta odpowiedź pomoże mi zrozumieć, jak działają ścieżki wirtualne podczas tworzenia pakietów. Przeczytałem oryginalny post na msdn ( asp.net/mvc/tutorials/mvc-4/bundling-and-minification ), ale po rozwiązaniu mojego problemu z Twoją odpowiedzią znalazłem na końcu postu trochę tekstu mówiącego o wirtualnym path: "Dobrą konwencją podczas tworzenia pakunków jest dołączenie„ pakunku "jako prefiksu w nazwie pakunku. Zapobiegnie to możliwemu konfliktowi routingu.". Myślę, że to zdanie POWINNO być pogrubione z czerwono-żółtym obrazem ostrzegawczym. : D Dziękuję!
— Samuel

45

Ten problem jest domyślny .NET nie „przetwarza” żądań z rozszerzeniem .js lub .css.

Są na to dwie poprawki (wystarczy zrobić JEDNĄ)

A) Usuń rozszerzenia z nazw pakietów. (zalecane) Spowoduje to, że .NET przetworzy żądanie i uruchomi je za pośrednictwem modułu BundleModule.

B) Dodaj to do swojego web.config w sekcji system.webServer, co spowoduje, że .NET będzie uruchamiać żądania .js i .css przez moduł BundleModule.

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

Wielkie okrzyki dla Raya Moro, który odkrył rzeczywistą przyczynę i podzielił się nią ze mną na moim blogu: http://blog.cdeutsch.com/2012/11/fixing-404-errors-for-aspnet-mvc-apps.html


Zaktualizowano o więcej informacji na temat głównej przyczyny wraz z drugą opcją.
— cdeutsch

1
Miałem ten problem, ponieważ nazwa mojego pakietu była podobną do folderu, która kończyła się na „css”. Chociaż mój pakiet nie miał dokładnie rozszerzenia pliku, sugestia A doprowadziła mnie do problemu.
— dsnunez

1
To powinna być poprawna odpowiedź, pomaga mi z tym samym problemem.
— psulek 14.07.15

świetna odpowiedź, pomóż mi
— DKR

Ta rzecz z brakującą sekcją <module> z web.config oh człowieku ...
— XDS

19

Zdarzyło się też ze mną, kiedy próbowałem wdrożyć moją aplikację ASP.NET MVC w AppHarbor.

Miałem pakiet arkuszy stylów z nazwą

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

a struktura folderów była

-- Zadowolony

- Zawartość \ Bootstrap \ ...

Po prostu zmieniając nazwę pakietu na "~/Content/bootstrap-css"mój problem został rozwiązany.


15

Wiem, że spóźniłem się 4 lata na to pytanie, ale to zadziałało.

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

   BundleTable.EnableOptimizations = true;     // Added this           
}

2
Ze wszystkich odpowiedzi powyżej i poniżej. To jedyny, który działał dla mnie.
— Haim Katz,

3
Umożliwia to optymalizacje w trybie debugowania. Chociaż jest to świetny sposób na sprawdzenie, czy pakiety działają na komputerze deweloperskim, nie należy pozostawiać tej instrukcji w swoim kodzie.
— Rudey

9

403 błąd rozwiązany. tutaj jest szczegółowe wyjaśnienie i rozwiązanie błędu 403.
Rozwiązanie jest pokazane dla pakietu CSS. Jednak dotyczy to również JavaScript.

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

Krótko mówiąc, upewnij się, że ścieżka wirtualna [Script | Style]Bundle("~/content/[script | css]")nie pasuje do folderu w systemie plików (np. C:\approot\Content\[script | css])[Script | Style]Bundle("~/content/[scriptDiff | cssDiff]")


2
Dzięki, to jest problem, którego doświadczyłem. Aby go rozwiązać, w BundleConfig.cs zmieniłem ścieżkę z @ Styles.Render ("~ / Content / css") na @ Styles.Render ("~ / bundles / css"). Teraz działa, gdy działa lokalnie w trybie debugowania i po opublikowaniu w trybie wydania lub debugowania.
— Ken Palmer

Dobra odpowiedź, ale nie należy zostawiać tylko linku, przynajmniej podstawowe kroki tego zapisu byłyby świetne, gdybyśmy mieli tutaj dostęp do strony, do której prowadzi link.
— Vitor M. Barbosa

5

Rozwiązałem problem, dodając poniższy wiersz kodu w klasie BundleConfig

BundleTable.EnableOptimizations = false;

3

To, co robię, jest bardzo proste,

Dodaję „js” na końcu ScriptBundle w ten sposób: new ScriptBundle („~ / bundles / appjs”) I dodaję „css” na końcu StyleBundle, tak jak to: new StyleBundle („~ / content / appcss”)

Nazwy moich folderów nigdy nie kończą się na „js” lub „css”.

Że należy to zrobić.


2

Dotyczy to również „klasy ScriptBundle”, upewnij się, że „nazwa parametru” konstruktora nie jest zgodna ze ścieżką w systemie plików aplikacji internetowej. Pamiętaj, że usługi IIS spróbują obsłużyć plik / żądanie.


1

Problem może również wynikać z zaszyfrowania pliku. Przyszło mi to do głowy, gdy pobrałem BootStrap i użyłem dostarczonych plików. Pokazały zielone w Eksploratorze Windows i działały dobrze w Visual Studio, ale po wdrożeniu otrzymałem błąd 403.

Możesz sprawdzić, czy są zaszyfrowane, przechodząc do właściwości, a następnie do właściwości zaawansowanych i znajduje się zaszyfrowane pole wyboru.

Odznacz i nie będzie już problemu.


0

Mam ten sam problem z tym błędem (403 zabronione). W moim przypadku przyczyną jest to, że serwer proxy w mojej organizacji blokuje mój plik css. Nazwa pliku CSS pasuje do jednej z reguł blokowania.


0

Dowiedziałem się, że pliku bootstrap.css nie ma w folderze z zawartością, więc szukałem go w paczkach i wklejałem tam… zadziałało!

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.