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.