ASP MVC w usługach IIS 7 powoduje: Błąd HTTP 403.14 - Zabroniony

146

Tworzę projekt sieciowy ASP MVC. Teraz mam wymaganie, które zmusza mnie do wdrożenia w środowisku programistycznym IIS7 (aby sprawdzić niektóre funkcje). Powyższy komunikat o błędzie pojawia się za każdym razem, gdy próbuję wpisać adres URL witryny internetowej. (Uwaga: maszyna programistyczna: Vista Home Premium, IIS7)

Co zrobiłem do tej pory:

Edytowano plik HOSTS (C: \ WINDOWS \ system32 \ drivers \ etc \ hosts).

Umieść w nim dwie domeny (127.0.0.1 domena1.com i 127.0.0.1 domena2.com).

Utworzono folder c: \ sites \ dirOfApplication i wdrożono z poziomu programu Visual Studio 8 w tym folderze.

W IIS7 utworzono nową witrynę z nazwą hosta domena1.com i powyższym folderem aplikacji.

Wpisanie adresu domena1.com w przeglądarce internetowej powoduje powyższy błąd (Błąd HTTP 403.14 - Zabroniony - serwer sieci Web jest skonfigurowany tak, aby nie wyświetlał zawartości tego katalogu).

Myślę, że coś mi brakuje, ale nie wiem co! Podjęto próbę wdrożenia plików System.Web.Mvc, System.Web.Abstraction i System.Web.Routing z takim samym wynikiem. Za każdym razem, gdy próbuję nacisnąć F5 i uruchomić aplikację, działa dobrze!

savvas sopiadis
źródło
możliwy duplikat ASP.NET MVC w usługach IIS 7.5
Fenton,

Odpowiedzi:

224

Może komuś się przyda: po przekonwertowaniu mojej aplikacji na MVC 4 z .NET framework 4.5 i zainstalowaniu frameworka na moim serwerze z IIS 7.0 napotkałem ten sam błąd „zabroniony”, o którym mowa w pytaniu. Wypróbowałem wszystkie opisane powyżej opcje bezskutecznie, gdy zauważyłem

<system.webServer>
 <modules runAllManagedModulesForAllRequests="true"/>
</system.webServer>

brakowało w moim pliku web.config. Po dodaniu tego wszystko działało. Proste, ale łatwe do przeoczenia ...

EDYTOWAĆ:

Oczywiście powyższe rozwiązanie zadziała, ale faktycznie jest to strata zasobów. Myślę, że lepiej jest dodać moduł routingu, jak wskazał w komentarzach Chris Herring .

<system.webServer>
  <modules>
    <remove name="UrlRoutingModule-4.0" />
    <add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" preCondition="" />
  </modules>
</system.webServer>
Cyril Mestrom
źródło
2
Okazuje się, że kiedy odinstalowałem pakiet NuGet, usunął on plik runAllManagedModulesForAllRequests="true"z mojego pliku Web.config. Dziękuję, że wspomniałeś o tym, zanim spędziłem całą noc próbując to rozgryźć.
Schmalls
3
TO!! Arrrrgh Spędziłem / zmarnowałem cały dzień, próbując zmusić to do pracy, dopóki nie znalazłem twojej odpowiedzi, dziękuję! Dziwne jest to, że działałoby dobrze na IIS na mojej lokalnej maszynie, ale nie na pudełku produkcyjnym i obaj używają IIS7.5
Glenn Slaven
1
To było to. Odinstalowanie Cassette Nuget czasami je usuwa. Dzięki.
Zachary Scott,
8
spróbuj unikać tego ustawienia, dodając moduł routingu - britishdeveloper.co.uk/2010/06/…
Chris Herring
6
Uwielbiam komentarz w odpowiedzi „Może komuś się przyda”… lol… Wygląda na to, że jest przydatny dla TONY ludzi, łącznie ze mną.
Paul,
126

Odpowiedział na SO tutaj , pytanie: 403 - Zabronione na podstawowym wdrożeniu MVC 3 na iis7.5

Biegnij aspnet_regiis -i. Często stwierdzałem, że musisz to zrobić, aby aplikacje 4.0 działały. Otwórz wiersz polecenia jako Administrator(kliknij prawym przyciskiem myszy ikonę wiersza polecenia i wybierz Uruchom jako administrator):

cd \
cd Windows\Microsoft.NET\Framework\v4.xxx.xxx
aspnet_regiis -i

Po zainstalowaniu i zarejestrowaniu upewnij się, że aplikacja korzysta z puli aplikacji ustawionej na .NET 4.0.

UPDATE: Właśnie znalazłem problem z tym poleceniem. Użycie -i zaktualizowało wszystkie pule aplikacji do ASP.NET 4.0.

Użycie aspnet_regiis -irpowoduje zainstalowanie wersji programu ASP.NET, ale nie powoduje zmiany żadnych aplikacji internetowych na tę wersję. Możesz także przejrzeć opcję -iru.

Brettski
źródło
Dla mnie też zadziałało. Po uruchomieniu aspnet_regiis -i polecenie UrlMappingModule został zainstalowany w usługach IIS.
Manish Gupta
Po zainstalowaniu usług IIS musiałem uruchomić aspnet_regiis, aby wszystko działało, mimo że .NET 4 wydawał się już zarejestrowany.
Brian
Jeśli struktura została zainstalowana przed usługami IIS, to tak, będziesz musiał aspnet_regiis.
Brettski
2
Nie zapominaj, że w przypadku systemu 64-bitowego jest to „Framework64”. Tj. Windows \ Microsoft.NET \ Framework64 \ v4.xxx.xxx
grahamesd
W tym przypadku 64 lub 32-bitowa wersja aspnet_regiis nie ma znaczenia. Niektóre przypadki specjalne są wymienione tutaj: msdn.microsoft.com/en-us/library/k6h9cz8h.aspx#Anchor_1
Brettski
34

Ja też napotkałem ten błąd. Cała konfiguracja i uprawnienia były poprawne. Ale zapomniałem skopiować Global.asax na serwer i to właśnie spowodowało błąd 403.

Bogdan Litescu
źródło
W moim przypadku przypadkowo przesunąłem go myszką, nie zauważając. Dzięki!
Mathias Lykkegaard Lorenzen
Po prostu zmarnowałem 2 godziny, ponieważ przeoczyłem kopiowanie tego pliku po wyczyszczeniu folderu z dokumentami sieciowymi!
Steven Sproat
10

To dlatego, że jesteś zbyt pewny tego, co robisz (ja)!

Na moim komputerze jest zainstalowany IIS 7, ale wymagany składnik ASP.NET (Panel sterowania-> Programy-> Włącz / Wyłącz-> ASP.NET) nie był.

Więc zainstalowanie tego rozwiązało problem

savvas sopiadis
źródło
9

Miałem ten sam problem. Ten artykuł pomocy technicznej firmy Microsoft rozwiązał ten problem.
https://support.microsoft.com/en-us/help/2023146/mvc-2-and-asp.net-4-web-forms-applications-that-use-url-routing-might-return-http- 404-błędy-kiedy-próbują-przetworzyć-bez-rozszerzeń-urls-w-iis-7-and-i-7.5

W oknie dialogowym „Włączanie i wyłączanie funkcji systemu Windows” w aplikacji „Programy i funkcje” Panelu sterowania systemu Windows wykonaj następujące czynności:

  1. Przejdź do następującego węzła: Internetowe usługi informacyjne -> Usługi WWW -> Typowe funkcje HTTP
  2. Upewnij się, że jest zaznaczona opcja „Przekierowywanie błędów HTTP”.

-lub-

  1. Przejdź do następującego węzła: Internetowe usługi informacyjne -> Usługi WWW -> Funkcje wydajności
  2. Upewnij się, że jest zaznaczona opcja „Kompresja statycznej treści”. Po wybraniu jednej z opcji kliknij „OK”, aby zapisać zmiany.

Ponowne włączenie modułu przekierowania błędów HTTP lub modułu kompresji zawartości statycznej gwarantuje, że ASP.NET i IIS poprawnie zsynchronizują zdarzenia potoku HTTP. Dzięki temu moduł routingu adresów URL może przetwarzać adresy URL bez rozszerzeń.

Donny V.
źródło
7

Spróbuj zastosować poniższe ustawienia:

1) Nadaj użytkownikowi niezbędne uprawnienia IIS_IUSRSw IIS Server(kliknij prawym przyciskiem myszy witrynę internetową, a następnie Edytuj uprawnienia> Bezpieczeństwo).

wprowadź opis obrazu tutaj

2) Jeśli używasz .NET Framework 4, upewnij się, że wersja .NET Framework znajduje się v4.0w tej, Application Poolktórej używa Twoja witryna.

wprowadź opis obrazu tutaj

3) Otwórz Commanp Prompt as administratori uruchom iisresetpolecenie w celu ponownego uruchomienia IIS Server.

Mam nadzieję że to pomoże...

Murat Yıldız
źródło
Porada: Jeśli nadal pojawiają się błędy uprawnień, po wykonaniu tej czynności może być konieczne wykonanie iisreset w cmd jako administrator, aby witryna działała w usługach IIS.
Cory Koch
6

W moim przypadku pomogło mi następujące podejście:

  1. aspnet_regiis -i w Windows\Microsoft.Net\Framework

  2. Dodawanie modułów do system.webServer

    <system.webServer>
        <modules runAllManagedModulesForAllRequests="true"/>
        ...
    </system.webServer>
Stefan Michev
źródło
Domyślam się, że pominąłeś ramy. Ale otwórz cmd jako administrator i uruchom aspnet_regiis -i w Windows \ Microsoft.Net \ Framework \ v4.0.30319
DeadlyChambers
5

Sprawdź również, jeśli korzystasz z x64, czy w ustawieniach puli aplikacji włączono aplikacje 32-bitowe

wprowadź opis obrazu tutaj

David Christiansen
źródło
3

Na odznacz „precompile Podczas Publishing” - Byłem coraz 403.14 błąd na usługę internetową, którą właśnie napisany w VS2015 więc przepisał go w VS2013 i był już ten sam błąd. W obu przypadkach miałem włączoną opcję „Precompile While Publishing”. Usunąłem zaznaczenie, ale nadal otrzymywałem błąd. W moim przypadku miałem też „ Usuń wszystkie istniejące pliki przed opublikowaniem ”, ale nie usuwałem wszystkiego z katalogu docelowego na serwerze przed skopiowaniem tam nowo opublikowanych plików. Jeśli tego nie zrobisz - plik „ PrecompiledApp.config ” zostanie pozostawiony, co powoduje problem. Po usunięciu tego pliku byłem złoty w obu wersjach mojej usługi internetowej VS2013 i VS2015.

JTTx
źródło
2

Próbowałem tutaj wszystkiego; nic nie działało. Problem był w moim Web.configpliku, w jakiś sposób zależne powiązanie zestawu zostało zmienione z minimum 1na minimum 0.

<!-- was -->
<runtime>
    <assemblyBinding>
        <dependentAssembly>
            <assemblyIdentity name="System.Web.Mvc" />
                <bindingRedirect oldVersion="0.0.0.0-5.2.3.0" newVersion="5.2.3.0" />


<!-- should have been -->
                <bindingRedirect oldVersion="1.0.0.0-5.2.3.0" newVersion="5.2.3.0" />
codeMonkey
źródło
1

Należy pamiętać, że czasami błąd Managed pipeline modespowoduje ten błąd. Istnieją dwie opcje do wyboru integratedi classic.

Joe.wang
źródło
1

Jak naprawić „Błąd HTTP 403.14 - Zabroniony Serwer sieci Web jest skonfigurowany tak, aby nie wyświetlał zawartości tego katalogu”

Ten błąd występuje, gdy masz MVC 2+ działający w usługach IIS 7+, ponieważ ASP.NET 4 nie został zarejestrowany w usługach IIS. W moim przypadku tworzyłem projekt MVC 3 i hostowałem go w IIS 7.5.

Aby to naprawić, upewnij się, że masz zainstalowany MVC 2 lub nowszy i .Net Framework 4.0, a następnie uruchom wiersz poleceń jako administrator i wpisz następujący wiersz:

32-bitowy (x86)

% windir% \ Microsoft.NET \ Framework \ v4.0.30319 \ aspnet_regiis.exe -ir

64-bitowy (x64)

% windir% \ Microsoft.NET \ Framework64 \ v4.0.30319 \ aspnet_regiis.exe -ir

Vishal Sen
źródło
1

Sprawdź swój plik Global.asax . W moim przypadku był pusty.

oyenigun
źródło
1

Jeśli najlepsze odpowiedzi nie działają, poszukaj konfiguracji nazwanej PrecompiledApp.configw katalogu hostingu i usuń ją, jeśli istnieje. Ten plik uniemożliwia prawidłowe działanie usług IISExpress i LocalIIS. (I myślę, że to błąd) Zawartość pliku w moim przypadku to:

<precompiledApp version="2" updatable="true"/>

Jestem w 100% przekonany, że to był problem z moim przypadkiem, ponieważ próbowałem wszystkiego w 2 godziny i testowałem wiele razy z tą konfiguracją.

Jeszcze jedno: nie możesz używać aspnet_regiisw nowszych wersjach systemu Windows i IIS, więc spróbuj

dism /online /enable-feature /featurename:IIS-ASPNET45 /all
sotn
źródło
1

Panel sterowania> włącz lub wyłącz funkcje systemu Windows> Serwer WWW> Tworzenie aplikacji

Sprawdź ASP.NET

Andres Kalev Rebane
źródło
0

Napotkałem również ten sam błąd, pomimo wszystkich podanych rozwiązań z następujących powodów:

  • Brakujące biblioteki DLL
  • Ciąg połączenia z bazą danych wskazuje na niedostępny serwer.
eulerfx
źródło
0

W moim przypadku brakowało web.config i wszystkich plików z wyjątkiem folderu / bin (nie zostały one w jakiś sposób skopiowane).
Głupie, ale to była ostatnia rzecz, jaką sprawdziłem.

eitanpo
źródło
0

Niedawno miałem ten błąd i stwierdziłem, że problem był spowodowany tym, że funkcja „Przekierowanie HTTP” nie została włączona na moim serwerze Windows Server. Ten post na blogu pomógł mi przejść przez rozwiązywanie problemów i znaleźć odpowiedź (pomimo starszej wersji systemu Windows Server): http://blogs.msdn.com/b/rjacobs/archive/2010/06/30/system-web-routing-routetable -not-working-with-iis.aspx dla nowszych serwerów przejdź do zarządzania komputerem, a następnie przewiń w dół do roli serwera sieci Web i kliknijadd role services

Seph
źródło
0

Dzięki projektowi ASP.NET z C # 4.5 rozwiązałem ten problem instalując rozszerzenie ASP.NET w Instalatorze platformy internetowej

Kamil Gareev
źródło
0

Możliwa może być jeszcze jedna rzecz

zainstaluj ręcznie .net framework 4.0

To rozwiązanie jest przeznaczone dla usług IIS7 w systemie Windows 7

otwórz cmd z ustawieniami administracyjnymi

przejdź do katalogu „C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319”

wpisz aspnet_regiis.exe -i

dostałem się do twojego inet managera wpisując komendę "inetmgr"

odśwież swoje IIS7

przeładuj witrynę.

Iftikhar Ali Ansari
źródło
0

Wiem, że miałeś ten problem na hoście wewnętrznym, ale miałem taki problem już wcześniej na hoście zewnętrznym iw moim przypadku miał on swoje własne rozwiązanie, może to oszczędziłoby komuś czas:

W rzeczywistości moja strona została ZATRZYMANA z jakiegoś powodu, którego obecnie nie znam, aby sprawdzić, czy masz ten sam problem, na stronie głównej WebsitePanel przejdź do Web -> Strony internetowe, a następnie wybierz nazwę domeny swojej witryny z listy , po tym w prawej części właśnie otwartej strony sprawdź, czy widzisz słowo STARTED, w przeciwnym razie, jeśli widzisz słowo STOPPED, zacznij od nowa. To wszystko.

Mohammad Musavi
źródło
0

Wiem, że to stary temat, ale możesz również otrzymać ten błąd (podczas debugowania), jeśli masz folder o takiej samej nazwie jak trasa w kontrolerze.

Na przykład, jeśli masz kontroler użytkownika z trasą o nazwie / User i masz TAKŻE folder w swoim rozwiązaniu o nazwie „User”, wówczas IISExpress spróbuje przeglądać folder zamiast wyświetlać widok.

MercifulGiraffe
źródło
0

Po wypróbowaniu każdego zaproponowanego tutaj rozwiązania znalazłem jeszcze jedno możliwe rozwiązanie: URLScan

W IIS wyłączono obsługę WebDAV, nawet w pliku web.config mojej aplikacji usunięto program obsługi i moduł WebDAV. PUT nadal zwracały 403 - zabronione bez żadnych wpisów dziennika w dziennikach usług IIS. (GET / POST działało dobrze).

Okazuje się, że IIS miał aktywny filtr ISAPI (URLScan), który blokował wszystkie PUT. Po usunięciu URLScan zadziałało.

Felix Beifuß
źródło
0

Moja sytuacja była zupełnie inna niż wszystkie te, a komunikat o błędzie 403: zabroniony był trochę czerwonym śledziem.

Jeśli funkcja Application_Start () w module Global.asax próbuje uzyskać dostęp do pliku web.config i nie ma tam wpisu, do którego się odwołuje, usługi IIS dławią się i (z jakiegoś powodu) generują komunikat o błędzie 403: Forbidden.

Sprawdź dokładnie, czy nie brakuje wpisu w pliku web.config, do którego próbujesz uzyskać dostęp w module Global.asax.

Jason Marsell
źródło
0

Jeśli jesteś podobny do mnie i masz aplikację korzystającą z NHibernate, a powyższe odpowiedzi nie rozwiązały Twojego problemu.

Powinieneś spojrzeć na parametry połączenia w swojej aplikacji; prawdopodobnie w pliku webconfig, aby upewnić się, że jest poprawny.

wale A
źródło
-1

Używam Identity Impersonate:

<system.web>
    <identity impersonate="true" userName="domain\username" password="password"/>
</system.Web>

Podczas wysyłania na serwer musisz dać nazwę użytkownika dostęp do Temporary ASP.NETfolderu Pliki, aby mógł poprawnie odczytywać / zapisywać / wykonywać:

C:\Windows\Microsoft.NET\"frameworkversion"\"aspversion"\Temporary ASP.NET Files

Oczywiście zastąp „frameworkversion” i „aspversion” wersjami, których używasz.

dalemac
źródło
-1

Krok 1: Wybierz witrynę, dla której błąd HTTP jest generowany w usługach IIS, a następnie kliknij Przeglądanie katalogów, jak pokazano na poniższym obrazku:

Krok 2: W oknie przeglądania katalogów w usługach IIS kliknij Włącz w Akcjach po prawej stronie, jak pokazano na poniższym diagramie:

Teraz przeglądanie katalogów jest włączone dla Twojej witryny asp.net, po prostu uruchom ponownie aplikację internetową w usługach IIS i przeglądaj witrynę w przeglądarce i zobacz wynik.

user3589806
źródło
-1

Używam: Win Server 2012 R2 / IIS 8.5 / MVC4 / .Net 4.5

Jeśli żadne z powyższych nie zadziałało, spróbuj tego:

Odznacz „Prekompiluj podczas publikowania”

To kopnęło mnie w tyłek na kilka dni.

D. Kermott
źródło
@ d-kermott, może moje [find] [( stackoverflow.com/a/31319136/912481 ) też będzie przydatne dla Ciebie?
Kamil Gareev
-1

Miałem ten problem, ale został on łatwo rozwiązany, przechodząc do Menedżera internetowych usług informacyjnych (IIS), klikając dwukrotnie opcję Przeglądanie katalogów i klikając opcję Włącz.

W moim przypadku mogłem uzyskać bezpośredni dostęp do plików, ale nie mogłem uzyskać dostępu do folderów.

Scott Izu
źródło
-1

Błędnie wpisałem adres IP o jedną cyfrę, co oznaczało, że trafiał na jeden z moich pozostałych serwerów. Bardzo mylące, ponieważ strona błędu .NET jest wyświetlana na niewłaściwym komputerze!

NickG
źródło