ASP.NET MVC unter IIS 7.5

338

Ich verwende Windows 7 Ultimate (64 Bit) mit Visual Studio 2010 RC. Ich habe kürzlich beschlossen, dass VS meine Apps auf IIS ausführt / debuggt und nicht auf dem mitgelieferten Entwicklungsserver.

Jedes Mal, wenn ich versuche, eine MVC-App auszuführen, wird folgende Fehlermeldung angezeigt:

HTTP-Fehler 403.14 - Verboten Der Webserver ist so konfiguriert, dass der Inhalt dieses Verzeichnisses nicht aufgelistet wird. Detailliert

Fehlerinformationen

Modul DirectoryListingModule

Benachrichtigung ExecuteRequestHandler

Handler StaticFile-Fehler

Code 0x00000000 Angefordert

URL http: // localhost: 80 / mySite /

Physischer Pfad C: \ myProject \ mySite \

Anmeldemethode Anonyme Anmeldung

Benutzer anonym

Ich habe eine default.aspxDatei in das Verzeichnis gestellt und die folgende Fehlermeldung erhalten:

HTTP-Fehler 500.21 - Interner Server-Fehlerbehandler "PageHandlerFactory-Integrated" hat ein fehlerhaftes Modul "ManagedPipelineHandler" in seiner Modulliste

Gibt es noch andere Schritte, die ich vergessen habe, um dies zum Laufen zu bringen?

Hinweise: Ich habe IIS 7.5 nach der Installation von VS 2010 RC installiert. Ich habe die integrierte Schaltfläche "Virtuelles Verzeichnis erstellen" unter der Registerkarte "Web" in den "Eigenschaften" des MVC-Projekts in Visual Studio 2010 verwendet. Ich habe sichergestellt, dass die Anwendung den ASP.NET 4-App-Pool verwendet.

Unten sind die installierten Funktionen von IIS aufgeführt.

Alt-Text

Omar
quelle
Okay, ich habe ein ähnliches Problem und es wird nur bei ASP.NET MVC 3-Websites angezeigt. ASP.NET MVC 2-Websites funktionieren einwandfrei. Ich habe eine Default.aspx-Datei im Stammverzeichnis der Website abgelegt und sie wurde in Ordnung aufgenommen, kein Problem. Ich habe die ASP.NET MVC 3-Website mit VS2010 SP1 bin-bereitgestellt und immer noch keine Freude. Damit bin ich am Ende.
Umar Farooq Khawaja
5
Ich habe das gleiche Problem. Ich habe die Anwendung auf die Verwendung von 4.0 integriert eingestellt, den Registrierungsbefehl ausgeführt, um .NET bei IIS (7.5) zu registrieren, und trotzdem diesen Fehler erhalten.
Collin White
2
Ich war schließlich in der Lage , das Problem in meinem Set up zu finden, das war , dass ich die Datei umbenannt hatte _Layout.cshtmlzu _PageLayout.cshtmlund hatte die entsprechende Änderung gemacht _ViewStart.cshtmlals gut, aber anscheinend das nicht genug war. Sobald ich den Namen auf zurückgesetzt hatte _Layout.cshtml, fing es an zu funktionieren. Was verwirrend war, _PageLayout.cshtmlwar, dass es auf Win7 32 Bit korrekt aufgenommen wurde, aber nicht auf Win7 64 Bit oder WinSvr2K8 R2.
Umar Farooq Khawaja
3
Hat jemand eine Lösung für dieses Problem unter Windows 8 mit IIS 8 gefunden?
Eric Z Beard
3
Wenn Sie unter Windows Server 2012 oder Windows 8 arbeiten, sehen Sie Folgendes : [ stackoverflow.com/questions/12134713/… [1]: stackoverflow.com/questions/12134713/…
Lomak

Antworten:

499

ASP.NET 4 wurde nicht in IIS registriert. Musste den folgenden Befehl in der Kommandozeile ausführen / ausführen

32-Bit (x86) Windows

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

64-Bit (x64) Windows

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

Anmerkung aus David Murdochs Kommentar:

Dass sich die .net-Version geändert hat, seit diese Antwort veröffentlicht wurde. Überprüfen Sie, welche Version des Frameworks sich im Verzeichnis% windir% \ Microsoft.NET \ Framework64 befindet, und ändern Sie den Befehl entsprechend, bevor Sie ihn ausführen (derzeit v4.0.30319).

Omar
quelle
9
Beachten Sie die "64" in Framework64 für 64-Bit-Windows! das hat mich in die * ss gebissen. Ich muss die 32-Bit-Version 4 oder 5 Mal ohne Wirkung installiert haben.
Ben Lesh
14
Dass sich die .net-Version geändert hat, seit diese Antwort veröffentlicht wurde. Überprüfen Sie, welche Version des Frameworks sich im %windir%\Microsoft.NET\Framework64Verzeichnis befindet, und ändern Sie den Befehl entsprechend, bevor Sie ihn ausführen (derzeit v4.0.30319).
David Murdoch
1
Um @blesh hinzuzufügen, wenn Sie 64-Bit haben und die 32-Bit-Datei aspnet_regiis.exe ausführen, werden Ihnen möglicherweise nur die Optionen erneut
angezeigt
3
Wenn der Befehl aspnet_regiis.exe im .net Framework-Ordner fehlt, laden Sie das vollständige .net Framework-Installationsprogramm microsoft.com/download/en/…
Warrickh
11
Dies funktioniert übrigens in IIS8 nicht, wenn Sie versuchen, "Diese Option wird von dieser Version des Betriebssystems nicht unterstützt. Administratoren sollten stattdessen ASP.NET 4.5 mit IIS8 über" Windows-Funktionen ein- / ausschalten "installieren / deinstallieren. Dialogfeld, das Server Manager-Verwaltungstool oder das Befehlszeilentool dism.exe. Weitere Informationen finden Sie unter go.microsoft.com/fwlink/?LinkID=216771 . "
Mastro
199

Eine weitere Sache, die Sie sicherstellen müssen, ist das folgende Set in Ihrer web.config:

<system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/> 
</system.webServer>
Mark Boltuc
quelle
23
Das hat es für mich getan. Danke
Boca
5
Auch für mich gelöst. Seltsamerweise funktioniert es lokal in VS2010 IIS Express ohne diese Einstellung.
Phil
8
Wenn Sie nicht festlegen möchten runAllManagedModulesForAllRequests(was auch für statische Dateien ausgeführt wird), können Sie einen Microsoft-Hotfix installieren: microsoft.com/download/en/… .
Justin Helgerson
10
Versuchen Sie dies zu vermeiden, indem Sie das Routing-Modul hinzufügen: britishdeveloper.co.uk/2010/06/…
Chris Herring
Wenn Sie VS2013 verwenden und versuchen, auf IIS 7.5 auszuführen, müssen Sie dies hinzufügen
KenL
77

Stellen Sie sicher, dass in Ihrer web.config Folgendes festgelegt ist:

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

Bessere Lösung:

Obwohl die obige Lösung absolut einwandfrei funktioniert , kann sie andere Probleme verursachen, da alle registrierten HTTP-Module bei jeder Anforderung ausgeführt werden (auch bei jeder Anforderung von .jpg .gif .css .html .pdf usw.) und offensichtlich Ressourcenverschwendung ist. Stattdessen

<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>

Stellen Sie sicher, dass das Attribut preCondition leer ist. Dies bedeutet, dass es bei allen Anforderungen ausgeführt wird. [Lesen Sie mehr] ( http://www.britishdeveloper.co.uk/2010/06/dont-use-modules-runallmanagedmodulesfo.html , "Read original post")

Premchandra Singh
quelle
6
Dadurch wurden 403.14 im Stammverzeichnis und 404 in anderen Controller-Methoden für meine MVC-App behoben. Hier ist jedoch immer noch etwas faul, da auf demselben Server eine andere App mit denselben Einstellungen für sichtbare Sites ausgeführt wird und diese ohne diese Einstellung funktioniert. Dies ist eine web.config, die von einer SPA-Projektvorlage mit freundlicher Genehmigung von VS 2012 erstellt wurde und auf meiner Box einwandfrei funktioniert, jedoch nicht, wenn sie veröffentlicht wird.
Shannon
4
Ja, mein Entwicklungsgerät enthielt <system.web><httpModules><add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" />das Windows\Microsoft.NET\Framework64\v4.0.30319\Config\web.configund schien zum Zeitpunkt meiner VS 2012-Installation geändert worden zu sein. Die nächste Frage ist also, was in meinem anderen Projekt ermöglicht, dass es funktioniert.
Shannon
Beachten Sie, dass es anscheinend nicht die %windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_regiis.exe -irvon der Top-Lösung empfohlene ist, die festlegt, welche Standardeinstellungen auf meinem Entwicklungsgerät vorhanden sein müssen. Dieser Befehl behebt das Problem für mich nicht, sobald ich die UrlRoutingModule-Referenz entfernt habe.
Shannon
Das funktioniert unter Windows Server 2008 R2 IIS 7 für ASP.NET MVC 5. Vielen Dank!
Ervi B
42

Ein weiterer Grund, warum jemand diesen Fehler erhalten könnte, ist, dass sich die Datei Global.asax nicht mehr im Stammordner befindet.

ZippyV
quelle
4
Ja - das Installationsprogramm, das ich geschrieben habe, hat diese Datei nicht vermittelt. Vielen Dank!
Zadam
4
Das war auch mein Problem. Ich hätte aufgrund des 403-Symptoms nie gedacht, dass meiner Anwendung die Global.asax
Saul Dolgin
3
Außerdem wurde es für mich behoben: Vorkompilierung in Veröffentlichungsoptionen deaktiviert ( global.asaxist nur von Dateien betroffen).
Richard
1
Das hat mir einen Trick gemacht. Die Sache ist, dass für mich, und ich höre für viele andere, global.asax jedes Mal generiert wird, wenn ich etwas veröffentliche. Hat jemand einen Weg gefunden, es jedes Mal zu generieren?
Greg Z.
Danke, habe meine Probleme behoben. Die Anwendung läuft unter ASP.NET MVC 4.0, Framework 4.0. Gehostet auf Arvixe.
Joe King
20

Ich habe auch diesen Fehler erhalten und festgestellt, dass "HTTP-Umleitung" in Windows Server nicht aktiviert war. Dieser Blog-Beitrag weist auch darauf hin: http://blogs.msdn.com/b/rjacobs/archive/2010/06/30/system-web-routing-routetable-not-working-with-iis.aspx

toddkitta
quelle
6
Von all den verdammten Dingen, die es hätte sein können, ist es das. Ich habe überall gesucht und ein paar Stunden mit Sicherheitseinstellungen gespielt, aspnet_regiis und so weiter und so fort. Süßes Baby Jesus auf einer krümeligen Kaiserrolle.
Andrew Backer
Ich habe einen ganzen Tag dafür verbracht. Ich danke dir sehr.
Pradeep
Unter Windows 8 wurden nach dem Aktivieren der HTTP-Umleitung immer noch Fehler angezeigt. Musste dies als zweiten Schritt tun: Hinzufügen der ASP.NET 4.5-Rolle unter Internetinformationsdienste -> World Wide Web Services -> Anwendungsentwicklungsfunktionen serverfault.com/questions/514091/…
dreamerkumar
Der zweite Stopp löste mein Problem. Einige Maschinen arbeiten ohne, andere sind jedoch unerlässlich. Vielen Dank.
Alexis Heijmeijer
15

Gütiger Gott. Ich habe alle oben genannten Dinge ausprobiert (aber meine Einstellungen waren identisch). NOCH EINE ANDERE LÖSUNG, wenn Sie Probleme haben:

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

Versuchen Sie, diese KB für Ihr System zu installieren. Wenn Sie 404s sehen, könnte dies daran liegen, dass Sie dieses Update nicht haben - und das Isapi-Modul wird einfach nicht gefunden und es gibt nicht viel, was Sie dagegen tun können!

Sean Anderson
quelle
1
Für mich auf einem 32-Bit-Server gelöst, auf dem Server 2008 SP2 (nicht R2) ausgeführt wird
Simon C
7

Für mich auf einer Azure Server 2012 R2 IIS 8.5-VM mit einer Asp.Net MVC 5-App (bin Deployed MVC 5) musste ich an einer Eingabeaufforderung mit erhöhtem cmd Folgendes tun, obwohl ich 4.5 bereits installiert hatte:

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

Quelle: http://support.microsoft.com/kb/2736284

Ich habe auch Brute Force alle IIS-Funktionen mit der folgenden PowerShell installiert:

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

Quelle: http://www.iis.net/learn/install/installing-iis-85/installing-iis-85-on-windows-server-2012-r2

Jetzt funktioniert meine App.

Jon Kragh
quelle
Das 'dism' hat für mich funktioniert (ohne eine der anderen vorgeschlagenen Änderungen anzuwenden). Ich musste nur den Schalter '/ all' auf das Ende stellen, um sicherzustellen, dass auch alle 'übergeordneten' Funktionen installiert waren.
Jeroen Ritmeijer
Das hat bei mir funktioniert. Ausführen von MVC 5 mit .NET 4.5 unter Windows Server 2012. IIS installiert .NET 4.5 standardmäßig nicht.
DPac
6

Wir hatten eine MVC-Anwendung auf einen neuen Server verschoben. .NET 4 und MVC 3 wurden installiert, aber wir haben immer noch "Fehler 403.14". In diesem Fall bedeutete dies, dass IIS nicht verstand, dass es sich um eine MVC-Anwendung handelte, sondern nach der Standardseite suchte.

Die Lösung war einfach: Die HTTP-Umleitung wurde nicht auf dem Server installiert.

Server Manager - Rollen - Webserver (IIS) - Rollendienste - HTTP-Umleitung: Nicht installiert. Installiert, Problem gelöst.

Bjarne Havnen
quelle
1
Was ist der Server-Manager? wo finde ich es
Elad Katz
Server Manager befindet sich in der Verwaltung
udog
5

Auch wenn Ihre App vorkompiliert ist, sollten Sie haben

PrecompiledApp.config

im Stammordner Ihrer App, sonst könnten Sie auch bekommen HTTP Error 403.14.

pvasek
quelle
Ich hatte die Datei aus irgendeinem Grund dort, obwohl meine App nicht vorkompiliert ist. Die Datei wurde gelöscht und es funktioniert jetzt. Vielen Dank!
Vaindil
Ich wäre wirklich glücklich , wenn ich diese Antwort sehe vor 2 Stunden zu verbringen und löst es auf meinem eigenen ..
SOTN
4

Eine andere mögliche Lösung, wenn Sie sich in Ihrer global.asax bewegen, stellen Sie sicher, dass das Markup auf die richtige MvcApplication-Klasse verweist. Hoffentlich wird dies in Zukunft jemanden retten.

AaronHS
quelle
4

Ich hatte die WebDeploy IIS-Erweiterung verwendet, um meine Websites von IIS6 nach IIS7.5 zu importieren, sodass alle IIS-Einstellungen genau so waren, wie sie in der Produktionsumgebung waren. Nachdem ich alle hier bereitgestellten Lösungen ausprobiert hatte, von denen keine für mich funktionierte, musste ich einfach die App Pool-Einstellung für die Website von Classic auf Integrated ändern.

Michael Bianchi
quelle
4

Ich habe plötzlich das gleiche 404.14-Problem festgestellt. Schließlich wurde das Problem behoben, indem das Kontrollkästchen "Beim Veröffentlichen vorkompilieren" in den Einstellungen für das Veröffentlichungsprofil deaktiviert war.

user985287
quelle
Hier gilt das gleiche. Das Veröffentlichen war bis heute kein Problem - das Deaktivieren löste es. Trotzdem seltsam
Sir Rufo
4

Ich habe meine Standardroute an einem Punkt geändert von:

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

Zu:

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

Welches gab mir Ihren Fehler. Ich bin froh, dass jemand das Routing erwähnt hat, weil ich wahrscheinlich für immer dabei gewesen wäre.

Nate-Wilkins
quelle
4

In meinem Fall ist ASP.NET 4.5 nicht auf dem Server installiert, daher wurde das Problem durch die Installation von ASP.NET 4.5 behoben.

Saif
quelle
4

Sie können diesen Fehler beheben, indem Sie cmd als admin als ausführen Geben Sie hier die Bildbeschreibung ein

Machen Sie dasselbe wie im Bild für Windows 32 Bit


Nehmen Sie einfach Änderungen in 64-Bit als Framework64 anstelle von nur Framework vor. Gehen Sie dann zu iis und aktualisieren Sie die Site. Wenn Sie immer noch einen Fehler haben, nehmen Sie Änderungen im Anwendungspool vor


quelle
3

Ich hatte ein anderes Problem, das zu diesem Problem führte.

  • Ich hatte sichergestellt, dass in meinem App-Pool .net 4 im integrierten Modus ausgeführt wurde
  • Ich hatte aspnet_regiis.exe -i ausgeführt
  • Ich hatte überprüft, ob die Ordnerberechtigungen für das Konto, auf dem mein App-Pool ausgeführt wird, korrekt festgelegt wurden

Keines dieser Dinge funktionierte. Es stellte sich heraus, dass ich in meiner web.config unter system.webserver> modules Folgendes hatte:

<remove name="WindowsAuthentication" />

Offensichtlich wurde dadurch das Windows-Authentifizierungsmodul entfernt, das irgendwie alles aus dem Gleichgewicht zu bringen schien.

Ich hoffe das hilft jemandem, da mich das fast den ganzen Abend gekostet hat!

Paul Suart
quelle
3

Die Benutzeroberfläche ist in den neueren Versionen von Windows Server etwas anders. Hier müssen Sie ASP.Net aktivieren, damit es unter IIS funktioniert

Fix IIS & Asp.net

Matthew Zourelias
quelle
2

Hinzufügen einer weiteren Lösung für dieses Problem.

In meiner Global.asax.cs-Datei hatte ich versucht, dass versuchte PHP-Dateien von der MVC-Pipeline wie folgt verwendet werden:

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

Ich hatte dies zuvor in einem MVC2-Projekt getan und es funktionierte einwandfrei, aber dies in meiner MVC 3-App zu tun, verursachte das oben gemeldete Problem.

TheRightChoyce
quelle
2

Ein weiterer Grund, warum dies passieren kann - Ihre RouteConfig.csoder WebApiConfig.cssind ungültig.

In meinem Fall hatte ich eine Route als solche definiert (beachten Sie die Klammer anstelle der geschweiften Klammer):

...
routeTemplate: "api/(something}"
...
Terry
quelle
Für mich geht das! Falls ich mich geändert habe routes.MapRoute( name:"Default", url:"{controller}/{action}/{repositoryId}", defaults:new { controller = "Account", action = "Login", id = UrlParameter.Optional } );. Wenn ich es repariert habe, fange id = UrlParameter.Optionalan repositoryId = UrlParameter.Optionalzu arbeiten!
Dmitresky
2

Beachten Sie, dass Sie für Windows 8-Benutzer Windows-Komponenten hinzufügen / entfernen und die Version des .net-Neustarts entfernen und anschließend neu installieren müssen, um sie bei IIS zu registrieren. Ich gehe davon aus, dass dies passiert, wenn Sie .net 4.5 von Visual Studio erhalten und anschließend IIS installieren.

Lee.Winter
quelle
2

So seltsam es auch scheinen mag, die Neuinstallation von IIS hat bei mir funktioniert. Der folgende Befehl wurde im Ordner ".net version" ausgeführt:

aspnet_regiis.exe /i

Geben Sie hier die Bildbeschreibung ein

Als ich diesen Befehl zum ersten Mal ausführte, wurde der HTTP-Fehler 403.14 angezeigt. Aber sobald ich den Befehl erneut ausgeführt habe, wurde das Problem behoben.

Obs : Eine andere Sache, die ich auch getan habe, war, HTTP Redirect von den Serverfunktionen im Serververwaltungsbildschirm zu entfernen, bevor IIS erneut installiert wurde. Vielleicht hatte dies auch Auswirkungen auf die Lösung des Problems, aber ich bin mir nicht sicher. Wenn die Neuinstallation von IIS immer noch nicht funktioniert, entfernen Sie die HTTP-Umleitung und versuchen Sie es erneut. Hoffentlich funktioniert es auch bei Ihnen.

Ulysses Alves
quelle
Zu Ihrer aspnet_regiis.exeInformation wird IIS nicht installiert oder neu installiert, sondern nur eine bestimmte .NET Framework-Version registriert, damit sie von IIS zum Hosten von Anwendungen verwendet werden kann.
Stephen
1

Um dieses Problem zu lösen, ohne auf den 32-Bit-Modus zurückgreifen zu müssen, müssen Sie den Quellcode für dieses Projekt aktualisieren

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)));

Ich habe dieses Problem als Diskussion im Diskussionsforum des IT-Cloud-Codeplex-Projekts angesprochen.

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

Omar
quelle
1

Dies hat bei mir funktioniert und könnte für einen anderen nützlich sein.

Möglicherweise sind nicht alle erforderlichen Komponenten vorhanden oder / und nicht alle sind korrekt registriert. Um dieses Problem zu beheben, deaktivieren Sie alle Optionen in der Systemsteuerung -> Windows-Funktionen aktivieren oder deaktivieren -> Internetinformationsdienste -> World Wide Web Services -> Anwendungsentwicklungsfunktionen, deaktivieren Sie alle Optionen und aktivieren Sie alle erneut. Setzen Sie dann IIS und zurück Überprüfen Sie, ob das Problem behoben ist.

Geben Sie hier die Bildbeschreibung ein

MirlvsMaximvs
quelle
1

Wenn Sie IIS 8.5 unter Windows 8 oder Server 2012 ausführen, funktioniert mvc 4/5 (.net 4.5) möglicherweise nicht in einem virtuellen Verzeichnis. Wenn Sie einen lokalen Hosteintrag in der Hostdatei erstellen, der auf Ihren lokalen Computer verweist, und dann eine neue lokale IIS-Website auf diesen Ordner verweisen (mit dem passenden Hostheadereintrag), funktioniert dieser dann.

Mastro
quelle
0

Ich habe einen neuen Namespace (und damit einen Ordner) erstellt, der mit der Route zu einem Controller (z . B. MvcApp/Test/SomeClasses.csund MvcApp/Controllers/TestController.cs) identisch ist . Dies führte auch zu einem 403.14!

Papa Mufflon
quelle
0

Für mich bestand die Lösung darin, das NuGet-Paket Microsoft.AspNet.WebPages (plus die Abhängigkeiten von Rasiermesser und Infrastruktur) zu meinem Webprojekt hinzuzufügen.

Die Infrastruktur musste zwangsweise neu installiert werden, da sie zunächst nicht als Referenz hinzugefügt wurde.

Mathieu Diepman
quelle
0

In meinem Fall wurde die .NET CRL-Version im Anwendungspool prppertires auf Kein verwalteter Code festgelegt (ich weiß nicht warum). Durch Festlegen auf .NET CRL Version v4.0.30319 wurde das Problem behoben.

Eugene Rozhkov
quelle