ASP.NET MVC w IIS 7.5

338

Korzystam z systemu Windows 7 Ultimate (64-bitowego) za pomocą programu Visual Studio 2010 RC. Niedawno zdecydowałem, że VS będzie uruchamiać / debugować moje aplikacje na IIS zamiast na serwerze deweloperskim, który jest z nimi związany.

Jednak za każdym razem, gdy próbuję uruchomić aplikację MVC, pojawia się następujący błąd:

Błąd HTTP 403.14 - Zabroniony Serwer sieci Web jest skonfigurowany tak, aby nie wyświetlał zawartości tego katalogu. Szczegółowe

Informacje o błędzie

Moduł DirectoryListingModule

Powiadomienie ExecuteRequestHandler

Błąd statycznego pliku obsługi

Żądany kod 0x00000000

URL http: // localhost: 80 / mySite /

Ścieżka fizyczna C: \ myProject \ mySite \

Metoda logowania Logowanie anonimowe

Anonimowy użytkownik

Umieściłem default.aspxplik w katalogu i otrzymałem następujący błąd:

Błąd HTTP 500.21 - Wewnętrzny moduł obsługi błędów serwera „PageHandlerFactory-Integrated” ma zły moduł „ManagedPipelineHandler” na liście modułów

Czy są jeszcze jakieś kroki, o których zapomniałem, aby to zadziałało?

Uwagi: Zainstalowałem IIS 7.5 po zainstalowaniu VS 2010 RC. Użyłem wbudowanego przycisku „Utwórz katalog wirtualny” w zakładce „Internet” w „Właściwości” projektu MVC w Visual Studio 2010. Upewniłem się, że aplikacja korzysta z puli aplikacji ASP.NET 4.

Poniżej znajdują się zainstalowane funkcje IIS, które posiadam.

alternatywny tekst

Omar
źródło
Okej, mam podobny problem i pojawia się tylko na stronach ASP.NET MVC 3. Witryny ASP.NET MVC 2 działają dobrze. Umieściłem plik Default.aspx w katalogu głównym witryny i został on pobrany w porządku, nie ma problemu. Wdrożiłem bin witryny ASP.NET MVC 3 przy użyciu VS2010 SP1 i nadal nie ma radości. Skończyłem z tym.
Umar Farooq Khawaja
5
Mam ten sam problem. Ustawiłem aplikację do używania zintegrowanej wersji 4.0, uruchomiłem polecenie rejestracji, aby zarejestrować platformę .NET w IIS (7.5) i nadal otrzymuję ten błąd.
Collin White
2
I w końcu udało się znaleźć problem w moim utworzone, zgodnie z którą miałem przemianowany plik _Layout.cshtmldo _PageLayout.cshtmli uczynił odpowiednią zmianę _ViewStart.cshtml, jak również, ale widocznie to nie wystarczyło. Gdy przywróciłem nazwę _Layout.cshtml, zaczęła działać. Co było mylące, to że _PageLayout.cshtmlzostał poprawnie pobrany w 32-bitowym Win7, ale nie w 64-bitowym Win7 lub WinSvr2K8 R2.
Umar Farooq Khawaja
3
Czy ktoś znalazł rozwiązanie tego problemu na Windows 8 z IIS 8?
Eric Z Beard
3
Jeśli korzystasz z systemu Windows Server 2012 lub Windows 8, zobacz to: [ stackoverflow.com/questions/12134713/… [1]: stackoverflow.com/questions/12134713/...
Lomak

Odpowiedzi:

499

ASP.NET 4 nie został zarejestrowany w IIS. Musiałem uruchomić następujące polecenie w wierszu polecenia / uruchomić

Windows 32-bitowy (x86)

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

Windows 64-bitowy (x64)

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

Notatka z komentarza Davida Murdocha:

Że wersja .net zmieniła się od czasu opublikowania tej odpowiedzi. Sprawdź, która wersja środowiska znajduje się w katalogu% windir% \ Microsoft.NET \ Framework64 i odpowiednio zmień polecenie przed uruchomieniem (obecnie jest to wersja 4.0.30319)

Omar
źródło
9
Uwaga „64” w Framework64 dla 64-bitowego systemu Windows! ugryzł mnie w * ss. Musiałem zainstalować wersję 32-bitową 4 lub 5 razy bez żadnego efektu.
Ben Lesh
14
Że wersja .net zmieniła się od czasu opublikowania tej odpowiedzi. Sprawdź, która wersja frameworku znajduje się w %windir%\Microsoft.NET\Framework64katalogu i odpowiednio zmień komendę przed uruchomieniem (obecnie jest to wersja 4.0.30319).
David Murdoch
1
aby dodać do @ rozwiązywanie problemów, jeśli masz 64-bit i uruchom 32-bitowy aspnet_regiis.exe, może po prostu ponownie pokazać opcje i nic nie robić
xster
3
Jeśli w folderze .net brakuje polecenia
aspnet_regiis.exe
11
Nie działa to w IIS8 btw, jeśli spróbujesz uzyskać „Ta opcja nie jest obsługiwana w tej wersji systemu operacyjnego. Administratorzy powinni zamiast tego zainstalować / odinstalować program ASP.NET 4.5 z IIS8, używając opcji„ Włącz / wyłącz funkcje systemu Windows ” okno dialogowe, narzędzie do zarządzania Menedżerem serwera lub narzędzie wiersza polecenia dism.exe. Aby uzyskać więcej informacji, zobacz go.microsoft.com/fwlink/?LinkID=216771 . ”
Mastro
199

Jeszcze jedna rzecz, którą musisz się upewnić, to następujący zestaw w pliku web.config:

<system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/> 
</system.webServer>
Mark Boltuc
źródło
23
To mi zrobiło. Dzięki
boca,
5
Rozwiązałem to również dla mnie. Dziwne, że działa lokalnie w VS2010 IIS Express bez tego ustawienia.
Phil,
8
Jeśli nie chcesz ustawiać runAllManagedModulesForAllRequests(który działa nawet dla plików statycznych), możesz zainstalować poprawkę Microsoft: microsoft.com/download/en/… .
Justin Helgerson
10
Spróbuj tego uniknąć, dodając moduł routingu: britishdeveloper.co.uk/2010/06/…
Chris Herring
Jeśli używasz VS2013 i próbujesz uruchomić na IIS 7.5 - musisz to dodać
KenL
77

Upewnij się, że masz następujący zestaw w pliku web.config:

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

Lepsze rozwiązanie:

Mimo że powyższe rozwiązanie działa absolutnie dobrze , może powodować inny problem, ponieważ uruchamia wszystkie zarejestrowane moduły HTTP na każde żądanie (nawet na każde żądanie .jpg .gif .css .html .pdf itp.) I jest to oczywiście marnotrawstwo zasobów. Zamiast

<system.webServer>
<modules>
  <remove name="UrlRoutingModule-4.0"/>
  <add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" preCondition="" />
</modules>
</system.webServer>

Upewnij się, że atrybut warunku wstępnego jest pusty, co oznacza, że ​​będzie działać na wszystkich żądaniach. [Czytaj więcej] ( http://www.britishdeveloper.co.uk/2010/06/dont-use-modules-runallmanagedmodulesfo.html , „Przeczytaj oryginalny post”)

Premchandra Singh
źródło
6
To naprawiło 403.14 w katalogu głównym i 404 w innych metodach kontrolerów dla mojej aplikacji MVC. Wciąż jednak jest tu coś podejrzanego, ponieważ mam inną aplikację działającą na tym samym serwerze z tymi samymi widocznymi ustawieniami witryny i działa bez tego ustawienia. To jest web.config stworzony przez szablon projektu SPA dzięki uprzejmości VS 2012, działający dobrze na moim pudełku, ale nie po opublikowaniu.
shannon
4
Tak więc moje urządzenie rozwój zawarte <system.web><httpModules><add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" />, w Windows\Microsoft.NET\Framework64\v4.0.30319\Config\web.configi spojrzał zostały zmodyfikowane w dniu mojej instalacji VS 2012. Kolejne pytanie brzmi: co jest w moim innym projekcie, który pozwala mu funkcjonować?
shannon
Zauważ, że najwyraźniej nie jest to %windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_regiis.exe -irzalecane przez najlepsze rozwiązanie, które ustawia wartości domyślne, które muszą istnieć na moim urządzeniu programistycznym. To polecenie nie rozwiązuje problemu po usunięciu odwołania UrlRoutingModule.
shannon
Działa to w systemie Windows Server 2008 R2 IIS 7 dla ASP.NET MVC 5. Dziękujemy!
Ervi B,
42

Innym powodem, dla którego ktoś może otrzymać ten błąd, jest to, że pliku Global.asax nie ma już w folderze głównym.

ZippyV
źródło
4
Tak - napisany przeze mnie instalator nie przyniósł tego pliku. Dzięki!
zadam
4
To też był mój problem. Nigdy bym nie zgadł na podstawie symptomu 403, że w mojej aplikacji brakuje Global.asax
Saul Dolgin
3
Naprawiłem to również dla mnie: wyłączono wstępną kompilację w opcjach publikowania ( global.asaxdotyczy tylko plików).
Richard
1
To mnie oszukało. Chodzi o to, że dla mnie, i słyszę dla wielu innych, global.asax jest generowany za każdym razem, gdy publikuję. Czy ktoś wymyślił sposób na wygenerowanie go za każdym razem?
Greg Z.
Dzięki, naprawiłem moje problemy. Aplikacja działa na ASP.NET MVC 4.0, Framework 4.0. Hostowany na Arvixe.
Joe King
20

Otrzymałem również ten błąd i odkryłem, że „Przekierowanie HTTP” nie zostało włączone w systemie Windows Server. Ten post na blogu również to podkreśla: http://blogs.msdn.com/b/rjacobs/archive/2010/06/30/system-web-routing-routetable-not-working-with-iis.aspx

toddkitta
źródło
6
Spośród wszystkich tych cholernych rzeczy, to mogło być. Szukałem wszędzie i przez kilka godzin bawiłem się ustawieniami zabezpieczeń, aspnet_regiis i tak dalej. Słodki Jezu Mały na kruchej bułce kajzera.
Andrew Backer,
Spędziłem na to cały dzień. Dziękuję bardzo.
Pradeep
W przypadku systemu Windows 8 nadal występują błędy po włączeniu przekierowania HTTP. Musiałem to zrobić jako drugi krok: dodaj rolę ASP.NET 4.5 w Internetowych usługach informacyjnych -> Usługi WWW -> Funkcje rozwoju aplikacji serverfault.com/questions/514091/…
dreamerkumar
Drugi przystanek rozwiązał mój problem. Niektóre maszyny działają bez niego, ale inne są niezbędne. Dzięki.
Alexis Heijmeijer
15

Słodki Jezu. Próbowałem wszystkich powyższych rzeczy (ale moje ustawienia były identyczne). JESZCZE INNE ROZWIĄZANIE, jeśli masz problemy:

http://support.microsoft.com/kb/980368

Spróbuj zainstalować ten KB dla swojego systemu. Jeśli widzisz 404, może to wynikać z tego, że nie masz tej aktualizacji - a moduł isapi po prostu się nie odnajduje i bez tego nie możesz wiele zrobić!

Sean Anderson
źródło
1
Rozwiązany dla mnie na 32-bitowym serwerze z systemem Server 2008 SP2 (nie R2)
Simon C
7

Dla mnie na maszynie Wirtualnej Azure Server 2012 R2 IIS 8.5 z aplikacją Asp.Net MVC 5 (bin wdrożony MVC 5) musiałem wykonać następujące czynności z wiersza polecenia z podwyższonym poziomem uprawnień, mimo że miałem już zainstalowany 4.5:

dism /online /enable-feature /featurename:IIS-ASPNET45

Źródło: http://support.microsoft.com/kb/2736284

Brute force zainstalowałem również wszystkie funkcje IIS za pomocą następującego programu PowerShell:

import-module servermanager
add-windowsfeature web-server -includeallsubfeature

Źródło: http://www.iis.net/learn/install/installing-iis-85/installing-iis-85-on-windows-server-2012-r2

Teraz moja aplikacja działa.

Jon Kragh
źródło
„Odmowa” działała dla mnie (bez stosowania innych proponowanych zmian). Musiałem tylko przełączyć przełącznik „/ all” na koniec, aby upewnić się, że wszystkie funkcje „nadrzędne” zostały zainstalowane.
Jeroen Ritmeijer
To zadziałało dla mnie. Uruchamianie MVC 5 z .NET 4.5 w systemie Windows Server 2012. IIS domyślnie nie instaluje .NET 4.5.
DPac,
6

Przeniesiono aplikację MVC na nowy serwer. .NET 4 i MVC 3 zostały zainstalowane, ale nadal pojawia się „Błąd 403.14 ″. W tym przypadku oznaczało to, że IIS nie rozumiał, że ma do czynienia z aplikacją MVC, szukał domyślnej strony.

Rozwiązanie było proste: Przekierowanie HTTP nie zostało zainstalowane na serwerze.

Menedżer serwera - Role - Serwer sieci Web (IIS) - Usługi ról - Przekierowanie HTTP: niezainstalowany. Zainstalowałem go, problem rozwiązany.

Bjarne Havnen
źródło
1
co to jest Server Manager? gdzie to znajdę?
Elad Katz
Menedżer serwera znajduje się w Narzędziach administracyjnych
udog
5

Również jeśli Twoja aplikacja jest wstępnie skompilowana, powinieneś ją mieć

PrecompiledApp.config

w folderze głównym aplikacji, w przeciwnym razie możesz również uzyskać HTTP Error 403.14.

pvasek
źródło
Miałem plik z jakiegoś powodu, mimo że moja aplikacja nie jest prekompilowana. Usunąłem plik i działa teraz. Dziękuję Ci!
vaindil
Byłbym bardzo szczęśliwy, gdybym zobaczył tę odpowiedź, zanim
spędzę
4

Innym możliwym rozwiązaniem, jeśli poruszasz się po global.asax, upewnij się, że znaczniki wskazują prawidłową klasę MvcApplication. Mam nadzieję, że uratuje to kogoś w przyszłości.

AaronHS
źródło
4

Użyłem rozszerzenia WebDeploy IIS do importowania moich stron internetowych z IIS6 do IIS7,5, więc wszystkie ustawienia IIS były dokładnie takie same, jak w środowisku produkcyjnym. Po wypróbowaniu wszystkich dostarczonych tu rozwiązań, z których żadne nie działało dla mnie, musiałem po prostu zmienić ustawienie Puli aplikacji dla witryny z Klasycznej na Zintegrowaną.

Michael Bianchi
źródło
4

Nagle spotkałem ten sam problem 404,14. Wreszcie problem został rozwiązany przez odznaczenie opcji „prekompiluj podczas publikowania” w ustawieniach profilu publikowania.

użytkownik985287
źródło
To samo tutaj. Publikowanie nie było problemem do dziś - odznaczenie rozwiązało to. Dziwne tak czy inaczej
Sir Rufo
4

W pewnym momencie zmieniłem domyślną trasę z:

routes.MapRoute(
"Default",
    "{controller}/{action}/{id}",
    new { controller = "Home", action = "Index", id = UrlParameter.Optional }

Do:

routes.MapRoute(
"Default",
    "{controller}/{action}/{id}",
    new { controller = "Home", action = "Index" }

Co dało mi twój błąd. Cieszę się, że ktoś wspomniał o routingu, ponieważ prawdopodobnie byłbym w tym na zawsze.

Nate-Wilkins
źródło
4

W moim przypadku ASP.NET 4.5 nie jest zainstalowany na serwerze, więc zainstalowanie ASP.NET 4.5 naprawiło problem.

Saif
źródło
4

Możesz rozwiązać ten błąd, uruchamiając cmd jako admin niż wprowadź opis zdjęcia tutaj

Zrób to samo, co na obrazie dla 32-bitowego systemu Windows

Po prostu wprowadź zmiany w wersji 64-bitowej jako framework64 zamiast tylko frameworku Idź do iis i odśwież stronę
Jeśli nadal masz jakiś błąd, wprowadź zmiany w puli aplikacji


źródło
3

Miałem inny problem, który doprowadził do tego problemu.

  • Upewniłem się, że moja pula aplikacji działa .net 4 w trybie zintegrowanym
  • Uruchomiłem aspnet_regiis.exe -i
  • Sprawdziłem, czy uprawnienia do folderu są ustawione poprawnie dla konta z uruchomioną moją pulą aplikacji

Żadna z tych rzeczy nie działała. Okazało się, że w moim web.config w module system.webserver> moduły miałem:

<remove name="WindowsAuthentication" />

Oczywiście usunęło to moduł uwierzytelniania systemu Windows, który wydawał się jakoś znokautować.

Mam nadzieję, że to komuś pomoże, ponieważ kosztowało mnie to większość wieczoru!

Paul Suart
źródło
3

Interfejs użytkownika jest nieco inny w nowszych wersjach systemu Windows Server. Tutaj musisz włączyć ASP.Net, aby działał na IIS

Napraw IIS i Asp.net

Matthew Zourelias
źródło
2

Dodanie innego rozwiązania tego problemu.

w moim pliku Global.asax.cs wyłączyłem próbę wykorzystania plików php przez potok MVC przy użyciu:

routes.IgnoreRoute( "{*php}" );

Zrobiłem to wcześniej w projekcie MVC2 i działało dobrze, ale zrobienie tego w mojej aplikacji MVC 3 spowodowało problem zgłoszony powyżej.

TheRightChoyce
źródło
2

Jest jeszcze jeden powód, dla którego może się to zdarzyć - twój RouteConfig.cslubWebApiConfig.cs są nieważne.

W moim przypadku zdefiniowałem trasę jako taką (zwróć uwagę na nawias zamiast nawiasu klamrowego):

...
routeTemplate: "api/(something}"
...
Terry
źródło
Mi to pasuje! W przypadku, gdy się zmieniłem routes.MapRoute( name:"Default", url:"{controller}/{action}/{repositoryId}", defaults:new { controller = "Account", action = "Login", id = UrlParameter.Optional } );. Kiedy stała id = UrlParameter.Optionalna repositoryId = UrlParameter.Optionalnim zacząć pracę!
Dmitresky
2

Uwaga: dla użytkowników systemu Windows 8 musisz dodać / usunąć składniki systemu Windows i usunąć wersję .net restartu, a następnie ponownie zainstalować, aby zarejestrować go w IIS. Zakładam, że tak się stanie, jeśli dostaniesz .net 4.5 ze studia wizualnego i później zainstalujesz IIS.

Lee.Winter
źródło
2

Choć może się to wydawać dziwne, ponowna instalacja IIS była dla mnie skuteczna, z następującego polecenia uruchomionego z folderu wersji .net:

aspnet_regiis.exe /i

wprowadź opis zdjęcia tutaj

Kiedy po raz pierwszy uruchomiłem to polecenie, zacząłem otrzymywać błąd HTTP 403.14. Ale kiedy ponownie uruchomiłem polecenie, rozwiązało to problem.

Obs : Inną rzeczą, którą zrobiłem, było usunięcie przekierowania HTTP z funkcji serwera na ekranie Zarządzanie serwerem przed ponownym zainstalowaniem IIS. Być może miało to również wpływ na rozwiązanie problemu, ale nie jestem pewien. Jeśli więc ponowna instalacja IIS nadal nie działa, spróbuj usunąć Przekierowanie HTTP i spróbuj ponownie. Mam nadzieję, że może to również zadziałać dla Ciebie.

Ulisses Alves
źródło
FYI aspnet_regiis.exenie instaluje ani nie instaluje ponownie usług IIS, rejestruje tylko określoną wersję środowiska .NET, dzięki czemu może być używany przez IIS do hostowania aplikacji.
stephen
1

Aby rozwiązać ten problem bez konieczności uciekania się do trybu 32-bitowego, musisz zaktualizować kod źródłowy tego projektu

public static void RegisterUrlRoutesFromAttributes(RouteCollection routes)
{
    // Enumerate assembly for UrlRoute attributes.
    List<MapRouteParams> routeParams = new List<MapRouteParams>();
    AppDomain.CurrentDomain.GetAssemblies()
        .ToList()
        .ForEach(assembly => routeParams.AddRange(GetRouteParamsFromAttributes(assembly)));

Podniosłem tę kwestię jako dyskusję na forum dyskusyjnym w projekcie IT codeplex.

http://itcloud.codeplex.com/discussions/262000

Omar
źródło
1

To działało dla mnie i może być przydatne dla innego.

Być może wszystkie wymagane komponenty nie są obecne lub / i nie wszystkie są poprawnie zarejestrowane. Aby rozwiązać ten problem, usuń zaznaczenie wszystkich opcji w Panelu sterowania -> Włącz lub wyłącz funkcje systemu Windows -> Internetowe usługi informacyjne -> Internetowe usługi sieciowe -> Funkcje rozwoju aplikacji, odznacz wszystkie opcje i zaznacz ponownie, a następnie zresetuj IIS i sprawdź, czy problem został rozwiązany.

wprowadź opis zdjęcia tutaj

MirlvsMaximvs
źródło
1

Jeśli używasz IIS 8.5 w systemie Windows 8 lub Server 2012, może się okazać, że uruchomienie mvc 4/5 (.net 4.5) nie działa w katalogu wirtualnym. Jeśli utworzysz lokalny wpis hosta w pliku hosta, aby skierować go z powrotem na komputer lokalny, a następnie wskaż nową lokalną witrynę internetową IIS do tego folderu (z pasującym wpisem nagłówka hosta), przekonasz się, że to działa.

Mastro
źródło
0

Utworzyłem nową przestrzeń nazw (a zatem folder) identyczną z trasą do kontrolera (np. MvcApp/Test/SomeClasses.csI MvcApp/Controllers/TestController.cs). Spowodowało to również 403,14!

Papa Mufflon
źródło
0

Dla mnie rozwiązaniem było dodanie pakietu NuGet Microsoft.AspNet.WebPages (plus to zależności Razor i Infrastructure) do mojego projektu internetowego.

Infrastrukturę trzeba było zdecydowanie przeinstalować, ponieważ początkowo nie została dodana jako odniesienie.

Mathieu Diepman
źródło
0

W moim przypadku .NET CRL Version in prppertires puli aplikacji ustawiono na Brak kodu zarządzanego (nie wiem dlaczego). Ustawienie go na .NET CRL wersja v4.0.30319 rozwiązało problem.

Eugene Rozhkov
źródło