MVC4 HTTP-Fehler 403.14 - Verboten

88

Ich habe eine .net4.5 ASP.NET MVC4-Webanwendung erstellt, die lokal einwandfrei funktioniert (IIS Express- und Entwicklungsserver), aber sobald ich sie auf meinem Webserver bereitstelle, wird der Fehler 403 ausgegeben. Ich habe .Net 4.5RC auf dem Server installiert und sogar das aspnet_regiis -i Bit ausprobiert, das jeder für seine Probleme mit früheren Versionen von MVC / .Net empfohlen hat, aber es hat nicht geholfen.

Irgendwelche Ideen?

EDIT : Mehr Infos zur Situation. Der Server ist 32bit und ich habe 4 andere MVC3-Anwendungen, die gut funktionieren. Es ist nur meine MVC4-App, die nicht funktioniert.

mithun_daa
quelle
Ich bin auf dasselbe Problem gestoßen, als ich eine neue asp.net 4.5 Web Forms- App erstellt habe. Es funktionierte lokal einwandfrei (IIS 7.5), aber bei der Bereitstellung auf einem Testserver (auch IIS 7.5) konnten die meisten meiner gebündelten und minimierten Javascript- und CSS-Dateien nicht mit 404 Not Found geladen werden. Die Antwort unten über runAllManagedModulesForAllRequests hat das Problem für mich gelöst!
ClearCloud8
Ich habe diese Frage möglicherweise beantwortet unter: stackoverflow.com/questions/24343788/…
fsbf
<system.webServer> <modules runAllManagedModulesForAllRequests = "true" /> </system.webServer>
Jinto John

Antworten:

172

Versuchen

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

Über

/server/405395/unable-to-get-anything-except-403-from-a-net-4-5-website

MarkKGreenway
quelle
1
Hatte das vorhanden, hat alles getan und immer noch funktionieren nur MVC 4-Sites. Es muss einen anderen Trick geben, der vorhanden sein muss, damit dies funktioniert.
Maxim V. Pavlov
1
Dies. Versuchte alle anderen Aktienlösungen ohne Freude, aber dies war diejenige, die das Problem löste.
Julia Hayward
1
Lieber Freund, ich mache es, aber es funktioniert nicht. Eigentlich habe ich mit MVC 4 und VisualStudio 2012 gearbeitet, mein Projekt funktioniert bis gestern gut, aber nach einigen üblichen Änderungen in meinen Codes steigt dieser Fehler auf der Standardseite (Home / Index). Kann mir irgendein Körper bitte helfen? ..
A.Dara
4
Dieser Fix ist für dieses Problem nicht geeignet (siehe den Link in der Antwort von Jason Koopmans). viel besser ist das Herunterladen des entsprechenden Hotfixes hier microsoft.com/en-us/download/…
Ahmad Ibrahim
@ AhmadIbrahim es ist in der Tat eine Lösung für das Problem. Das Update ist nur für 64-Bit, die Frage besagt eindeutig 32-Bit. Es gibt bestimmte Konfigurationen, für die RAMMFAR die zuverlässigste Arbeitslösung ist, und es wird eine minimale Serverlast hinzugefügt, wenn CDNs ordnungsgemäß verwendet werden.
MarkKGreenway
22

Fehler 403.14 ist der HTTP-Fehlercode, mit dem der Inhalt eines Verzeichnisses nicht aufgelistet werden darf. Bitte stellen Sie sicher, dass

  1. Sie haben die Website als Anwendung in IIS eingerichtet
  2. Sie haben .NET 4.5 auf dem Server installiert
  3. Sie haben den Anwendungspool so eingestellt, dass die richtige Version des .NET Frameworks ausgeführt wird (dh, er ist nicht auf .NET 2.0 festgelegt
  4. Sie verwenden die integrierte Pipeline in Ihrem Anwendungspool
  5. .NET 4.5 ist tatsächlich in IIS registriert. In diesem Beitrag finden Sie ein ähnliches Problem / eine ähnliche Lösung

Normalerweise sind a und d die größten Probleme bei MVC-Bereitstellungen in IIS

Tommy
quelle
1. Ich habe die Website nicht als Anwendung eingerichtet. 2. Ich habe .net 4.5 installiert. 3. Hatte meinen App-Pool auf das richtige Framework ausgerichtet. 4. Mein Pool wurde auf Classic eingestellt, in Integriert geändert, aber nicht geholfen. 5. Ich bin mir ziemlich sicher, dass 4.5 registriert ist.
mithun_daa
1
@mithun_daa - Wenn Sie Ihre Website nicht als Anwendung eingerichtet haben, ist es ziemlich einfach -> Klicken Sie mit der rechten Maustaste auf das virtuelle Verzeichnis / die virtuelle Website und konvertieren Sie in eine Anwendung (oder fügen Sie eine Anwendung hinzu, Terminologie entgeht mir im Moment)
Tommy
Ist das eine MVC4-spezifische Sache? Weil ich meine MVC3-Projekte noch nie als Anwendungen eingerichtet habe und sie einwandfrei funktionieren.
mithun_daa
Könnte sein, wie Sie dann bereitstellen -> aber jede .NET-Webanwendung muss als Anwendung in IIS festgelegt werden. Wenn Sie diese jedoch nur unter die Standardwebsite stellen, wird sie unter der Standardwebsite-Anwendung ausgeführt. Stellen Sie sicher, dass der Anwendungspool der Standardwebsite korrekt konfiguriert ist (.NET 4 / integriert). Wenn Sie ein virtuelles Verzeichnis / eine virtuelle Website in IIS erstellen, können Sie diese auch auf eine eigene Anwendung einstellen.
Tommy
Ich habe Sie wahrscheinlich verwirrt, aber keine der Websites befindet sich unter der Standardwebsite. Ich klicke in IIS7 mit der rechten Maustaste auf "Sites" und wähle "Website hinzufügen". So habe ich es gemacht.
mithun_daa
11

Vielleicht ... Wenn Sie zufällig den Veröffentlichungsassistenten verwenden (wie ich) und das Kontrollkästchen "Während der Veröffentlichung vorkompilieren" aktivieren (wie ich) und dieselben Symptome sehen ...

Ja, ich habe mich über den Kopf geschlagen, aber nachdem ich dieses Kontrollkästchen deaktiviert habe, eine scheinbar nicht verwandte Einstellung, verschwinden alle beschriebenen Symptome nach der erneuten Bereitstellung.

Hoffentlich behebt dies einige Leute.

Brian Kirkpatrick
quelle
Wenn dies der Fall ist, liegt eine mögliche Grundursache in einer anderen Version einer externen Bibliothek in der Produktionsumgebung. Ich hatte meine MVC-App gegen eine neuere Version einer DLL eines Drittanbieters und eine ältere Version auf dem Produktionsserver
kompiliert
Hier ist das Jungenwunder, das Kind, der Wundermann, das Phänomen, das Unaufhaltsame, der König, hier ist @ Brian Kirkpatrick, meine Damen und Herren
Luis Villarroel,
10

Windows-> Start -> Witwenfunktionen ein- und ausschalten

Stellen Sie sicher, dass Sie die erforderlichen Optionen aktivieren

Geben Sie hier die Bildbeschreibung ein

Kurkula
quelle
6

Vor der Bewerbung

runAllManagedModulesForAllRequests="true"/>

Betrachten Sie den folgenden Link, der eine weniger drastische Alternative vorschlägt. In dem Beitrag bietet der Autor die folgende Änderung an der lokalen web.config an:

  <system.webServer>
    <modules>
    <remove name="UrlRoutingModule-4.0" />
    <add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" preCondition="" />
    </modules>

http://www.britishdeveloper.co.uk/2010/06/dont-use-modules-runallmanagedmodulesfo.html

Jason Koopmans
quelle
Das ist die wahre Antwort. Vielen Dank!
Spivonious
5

In Visual Studio 2012 gibt es einen Refactor -> Rename Bug , der die "id" im Literal-String- Wert des URL-Parameters in meiner RouteConfig.cs fälschlicherweise umbenannt hat. Dies führte zu einem 403.14 bei einem neuen und ansonsten korrekten Setup in Windows Server 2012 und Windows Server 2008 R2.

routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{id}",
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);

wurde geändert in

routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{renamed_text}",
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
user641770
quelle
Ich habe vor langer Zeit festgestellt, dass ich nullden nameParameter eingeben kann, um zu vermeiden, dass für jede Route ein Name erstellt wird. Es stellt sich heraus, dass dies manchmal auch einen 403 verursacht (nur in unserer Produktumgebung Win Server 2008 R2 mit .NET 4.5.1, MVC 5 in einem VS2013-Projekt. Um dies zu beheben, habe ich für jede Route einen Namen hinzugefügt.
tristankoffee
2

Sie können auch eine 403 erhalten, wenn Sie beim Testen mit einem Dev-Server eine integrierte Pipeline verwenden und diese dann als klassischen Pipeline-Modus auf Ihrem Live-IIS 7.5-Webserver installieren. Außerdem fehlte mir der Ordner app_data, der ebenfalls erforderlich war

marcusdev
quelle
2

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 in der Hostdatei einen lokalen Hosteintrag 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
Warum dieselbe Antwort an mehreren Stellen posten ?
devnull
8
Weil ich versucht habe, die Lösung aufzuspüren, und sie betrifft beide. Rette jemanden vor der Jagd.
Mastro
Sie sollten keine doppelten Antworten veröffentlichen. Das ist alles was ich sagen kann.
devnull
1
<system.webServer>
   <modules runAllManagedModulesForAllRequests="true"/> 
 </system.webServer>

Sie können den obigen Code verwenden

Jinto John
quelle
1

Ich hatte den Anwendungspool der neuen App auf den DefaultAppPoolin IIS eingestellt, mit dem offensichtlich die ClassicPipeline verwendet wird .NET v.2.0.

Um das Problem zu lösen, habe ich mithilfe der IntegratedPipeline und einen neuen App-Pool erstellt .NET v4.0. Nur für diese neue Anwendung und dann fing alles an, wie erwartet zu funktionieren.

Vergessen Sie nicht, diesen neuen App-Pool der Anwendung zuzuweisen. Wählen Sie die Anwendung in IIS aus, klicken Sie auf Basic Settingsund wählen Sie dann den neuen App-Pool für die App aus.

Leniel Maccaferri
quelle
0

Das, was ich in letzter Zeit häufiger sehe, ist IIS und ermöglicht die Ausführung von 32-Bit-Anwendungen

Ist es das, was du versucht hast? Andernfalls benötigen wir weitere Informationen zu Produktions- und Entwicklungsserverversionen

MarkKGreenway
quelle
Es tut mir leid, aber ich bin nicht gefolgt, was du meintest. Dies ist ein 32-Bit-Server. Ich habe meinen Beitrag aktualisiert, um weitere Informationen hinzuzufügen.
mithun_daa
Ahhh ... Befinden sie sich in separaten app_pools?
MarkKGreenway
Ja, tatsächlich hat jede meiner Websites ihre eigenen App-Pools.
mithun_daa
0

Ich habe ein etwas anderes Problem. Auf Server 2012 habe ich irgendwie vergessen, asp.net 4.5 zu aktivieren. Wenn Sie dieses Problem haben, überprüfen Sie, ob Sie es aktivieren.

Volodymyr Bilyachat
quelle
0

Ich verwende Windows Server 2012 R2 unter Azure und ASP.NET 4.5, IIS 8

Ich habe dieses Problem gelöst, indem ich alle ASP.NET-Elemente in Programme und Funktionen deinstalliert und dann ASP.NET wie folgt mit dem Server-Manager mithilfe von Rollen und Funktionen neu installiert habe: Auswahl der rollenbasierten oder funktionsbasierten Installation, Auswahl meines Servers und dann Wählen Sie für Serverrolle auswählen die Option Webserver (IIS) / Webserver / Anwendungsentwicklung aus, klicken Sie auf ASP.NET 4.5, bestätigen Sie die Installation einer Voraussetzung und installieren Sie ASP.NET 4.5 erneut.

Meine früheren Suchanfragen hatten mich zu der Annahme geführt, dass das Problem tatsächlich auf ein Registrierungsproblem bei ASP.NET zurückzuführen ist. In früheren Versionen von ASP.NET gibt es tatsächlich ein Dienstprogramm, mit dem Sie ASP.NET registrieren können, ohne es erneut zu installieren. Dieses Dienstprogramm scheint jedoch nicht mehr verfügbar zu sein.

fsbf
quelle
0

Ich löse das Problem beim Öffnen des Visual Studios, beim Erweitern der Referenzen und beim Ändern der Eigenschaft "Copy Local" in "True".

Ich stelle fest, dass ich die DLLs der alten Version mit den DLLs meiner neuen Version vergleiche (das hat nicht funktioniert).

Wagner
quelle
0

In meinem Fall war die Standardseite meiner Anwendung index.html, die in den Standarddokumentoptionen fehlte. Durch Hinzufügen wurde der Fehler 403.14 Verboten behoben.

Erik K.
quelle
0

In meinem Fall wurde das Problem durch ein benutzerdefiniertes ActionFilterAttribute verursacht, das eine Art globales Filterattribut war. Das Attribut hat einen Dienst über Autofac instanziiert, aber der Dienst ist im Konstruktor abgestürzt:

public ActionFilterAttribute()
{
    _service = ContainerManager.Resolve<IService>();
}

public class Service: IService
{ 
    public Service()
    {
        throw new Exception('Oops!');
    }
}
Artem Vertiy
quelle
0

In meinem Fall haben weder Windows-Funktionen noch aspnet_regiis -idie Arbeit nicht erledigt. Nach stundenlangem Stöbern im Internet habe ich meine eigene Lösung gefunden:

  1. Im IIS-Manager in Modulen habe ich die Vererbung in lokal im Knoten UrlRoutingModule-4.0 geändert:

    Geben Sie hier die Bildbeschreibung ein

  2. In web.config habe ich eine Mischung aus einigen Tipps aus diesem Forum eingefügt:

    <system.webServer>
        <modules runAllManagedModulesForAllRequests="true">
            <remove name="UrlRoutingModule-4.0"></remove>
            <add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" preCondition=""></add>
        </modules>
    </system.webServer>

Ich hoffe es hilft

Sylwia M.
quelle