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?

Ricardo Polo Jaramillo
źródło
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.”

Paweł
źródło
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

cdeutsch
źródło
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.

Yasser Shaikh
źródło
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           
}
RayLoveless
źródło
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]")

yantaq
źródło
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;
Ye Yint
źródło
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ć.

abelabbesnabi
źródło
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.

William
źródło
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.

Greg Gum
źródło
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.

Konstantin Orlov
źródło
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!

Majid ALSarra
źródło