Errore HTTP MVC4 403.14 - Proibito


88

Ho creato un'app Web ASP.NET MVC4 .net4.5 che funziona bene localmente (IIS Express e dev server) ma una volta che la distribuisco sul mio server web, genera l'errore 403. Ho installato .Net 4.5RC sul server e ho anche provato il aspnet_regiis -i bit che tutti consigliavano per i loro problemi con le versioni precedenti di MVC / .Net ma non ha aiutato.

Qualche idea?

EDIT : Maggiori informazioni sulla situazione. Il server è a 32 bit e ho altre 4 applicazioni MVC3 che funzionano bene. È solo la mia app MVC4 che non funziona.


Ho riscontrato lo stesso problema quando ho creato una nuova app Asp.net 4.5 Web Forms . Funzionava bene localmente (IIS 7.5), ma quando veniva distribuito sul server di prova (anche IIS 7.5), la maggior parte dei miei file javascript e css in bundle e minificati non veniva caricata con 404 Not Found. La risposta di seguito su runAllManagedModulesForAllRequests ha risolto il problema per me!
ClearCloud8

Forse ho risposto a questa domanda a: stackoverflow.com/questions/24343788/...
fsbf

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

Risposte:


172

Provare

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

attraverso

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


1
Aveva tutto ciò in atto, ha fatto tutto e ancora funzionano solo i siti MVC 4. Ci deve essere qualche altro trucco che deve essere messo in atto affinché funzioni.
Maxim V. Pavlov

1
Questo. Ho provato tutte le altre soluzioni di scorta senza gioia, ma questa è stata quella che ha risolto il problema.
Julia Hayward

1
Caro amico, lo faccio, ma non funziona. Davvero, stavo lavorando con MVC 4 e VisualStudio 2012, il mio progetto funziona bene fino a ieri, ma dopo alcune modifiche usuali nei miei codici, questo errore sale nella pagina di default (home / index). qualsiasi corpo può aiutarmi per favore? ..
A.Dara

4
Questa correzione non è appropriata per questo problema (vedere il collegamento nella risposta di Jason Koopmans). molto meglio è scaricare il relativo hotfix qui microsoft.com/en-us/download/…
Ahmad Ibrahim

@AhmadIbrahim è infatti una soluzione al problema. La correzione è solo per 64 bit, la domanda indica chiaramente 32 bit. Esistono alcune configurazioni per le quali RAMMFAR è la soluzione di lavoro più affidabile e aggiunge un carico minimo del server se i CDN vengono utilizzati in modo appropriato.
MarkKGreenway

22

L'errore 403.14 è il codice di errore HTTP per non essere autorizzato a elencare il contenuto di una directory. Per favore, assicurati che

  1. Hai configurato il sito web come un'applicazione in IIS
  2. Hai .NET 4.5 installato sul server
  3. Hai impostato il pool di applicazioni per eseguire la versione corretta del framework .NET (cioè non è impostato su .NET 2.0
  4. Stai usando la pipeline integrata nel tuo pool di applicazioni
  5. .NET 4.5 è effettivamente registrato in IIS. Si prega di consultare questo post per un problema / risoluzione simile

Di solito, a e d sono i problemi maggiori che circondano le distribuzioni MVC in IIS


1. Non ho configurato il sito Web come applicazione. 2. Ho installato .net 4.5, 3. il mio pool di app ha come target il framework corretto. 4. Il mio pool era impostato per utilizzare il classico, l'ho cambiato in Integrato ma non ha aiutato. 5. Sono abbastanza sicuro che 4.5 sia registrato.
mithun_daa

1
@mithun_daa - Se non hai configurato il tuo sito web come un'applicazione, è abbastanza facile -> fai clic con il pulsante destro del mouse sulla directory / sito web virtuale e Converti in applicazione (o aggiungi applicazione, la terminologia mi sfugge al momento)
Tommy

È una cosa specifica MVC4? Perché non ho mai impostato i miei progetti MVC3 come applicazioni e funzionano perfettamente.
mithun_daa

Potrebbe essere come stai distribuendo allora -> ma qualsiasi applicazione web .NET deve essere impostata come un'applicazione in IIS. Tuttavia, se li stai semplicemente inserendo nel sito Web predefinito, allora è in esecuzione nell'applicazione del sito Web predefinito. Assicurati che il pool di applicazioni del sito Web predefinito sia configurato correttamente (.NET 4 / integrato). Quando crei una directory virtuale / un sito Web virtuale in IIS, hai la possibilità di impostarlo anche sulla propria applicazione.
Tommy

Probabilmente ti ho confuso ma nessuno dei siti si trova nel sito Web predefinito. Faccio clic con il tasto destro del mouse su "Siti" in IIS7 e scelgo "Aggiungi sito Web". È così che ho fatto.
mithun_daa

11

Forse ... Se ti capita di utilizzare la procedura guidata di pubblicazione (come ho fatto io) e seleziona la casella di controllo "Precompila durante la pubblicazione" (come ho fatto io) e vedi gli stessi sintomi ...

Sì, mi sono picchiata in testa, ma dopo aver deselezionato questa casella, un'impostazione apparentemente non correlata, tutti i sintomi descritti scompaiono dopo la ridistribuzione.

Si spera che questo risolva alcune persone.


In tal caso, una possibile causa principale è avere una versione diversa di una libreria esterna nell'ambiente di produzione. Ho compilato la mia app mvc con una versione più recente di una dll di terze parti e una versione precedente nel server di produzione ..
ValGe

Brindiamo al ragazzo prodigio, al ragazzo, all'uomo miracoloso, al fenomeno, all'inarrestabile, al re, ecco a @Brian Kirkpatrick signore e gentiluomini
Luis Villarroel,

10

Windows-> Start -> Attiva e disattiva le funzionalità delle vedove

Assicurati di controllare le opzioni richieste in

inserisci qui la descrizione dell'immagine


6

Prima di applicare

runAllManagedModulesForAllRequests="true"/>

considera il link sottostante che suggerisce un'alternativa meno drastica. Nel post l'autore offre la seguente modifica al web.config locale:

  <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


Questa è la vera risposta. Grazie!
Spivonious

5

C'è un refactoring -> Rename Bug in Visual Studio 2012 che ha erroneamente rinominato "id" all'interno del valore di stringa letterale del parametro url nel mio RouteConfig.cs. Ciò ha causato un 403.14 su una configurazione nuova e altrimenti corretta sia in Windows Server 2012 che in Windows Server 2008 R2.

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

è stato cambiato in

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

Per me ho scoperto tempo fa che posso inserire nullil nameparametro per evitare di fare un nome per ogni percorso. Si scopre che questo a volte causa anche un 403 (solo nel nostro ambiente di produzione, Win Server 2008 R2 con .NET 4.5.1, MVC 5 in un progetto VS2013. Per risolvere ho aggiunto un nome per ogni route.
tristankoffee

2

Puoi anche ottenere un 403 se durante il test con il server dev stai utilizzando la pipeline integrata e quindi installi come modalità pipeline classica sul tuo server web IIS 7.5 live, inoltre mi mancava la mia cartella app_data che era anche richiesta


2

Se esegui IIS 8.5 su Windows 8 o Server 2012, potresti scoprire che l'esecuzione di mvc 4/5 (.net 4.5) non funziona in una directory virtuale. Se crei una voce di host locale nel file host per puntare di nuovo al tuo computer locale e quindi punti un nuovo sito Web IIS locale a quella cartella (con la voce di intestazione host corrispondente) scoprirai che funziona.


Perché pubblicare la stessa risposta in più posti?
devnull

8
Perché stavo cercando di trovare la soluzione e riguarda entrambi. Salva qualcuno dalla caccia in giro.
Mastro

Non dovresti pubblicare risposte duplicate. È tutto quello che posso dire.
devnull

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

Puoi usare il codice sopra


1

Avevo impostato il pool di applicazioni della nuova app DefaultAppPoolsu IIS che ovviamente utilizza la Classicpipeline con .NET v.2.0.

Per risolvere il problema ho creato un nuovo App Pool utilizzando la Integratedpipeline e .NET v4.0. solo per questa nuova applicazione e poi tutto ha iniziato a funzionare come previsto.

Non dimenticare di assegnare questo nuovo pool di app all'applicazione. Seleziona l'applicazione in IIS, fai clic su, Basic Settingsquindi scegli il nuovo pool di app per l'app.


0

quello che vedo più frequentemente di recente è IIS e consente l'esecuzione di applicazioni a 32 bit

È questo quello che hai provato. altrimenti abbiamo bisogno di maggiori informazioni sulla produzione e sulle versioni del server di sviluppo


Mi dispiace ma non ho seguito quello che intendevi. Questo è un server a 32 bit. Ho aggiornato il mio post per aggiungere ulteriori informazioni.
mithun_daa

Ahhh ... Sono in app_pool separati?
MarkKGreenway

Sì, infatti ogni mio sito ha i propri pool di app.
mithun_daa

0

Ho un problema leggermente diverso, sul server 2012 in qualche modo mi sono dimenticato di abilitare asp.net 4.5 quindi se hai questo problema, ricontrolla di abilitarlo.


0

Utilizzo Windows Server 2012 R2 su Azure e ASP.NET 4.5, IIS 8

Ho risolto questo problema disinstallando tutti gli elementi ASP.NET in Programmi e funzionalità, quindi reinstallando ASP.NET in questo modo con Server Manager utilizzando Aggiungi ruoli e funzionalità: ho selezionato l'installazione basata su ruoli o basata su funzionalità, ho scelto il mio server e quindi per Selezionare il ruolo del server, selezionare Server Web (IIS) / Server Web / Sviluppo applicazioni, quindi fare clic su ASP.NET 4.5, confermare l'installazione di un prerequisito e quindi reinstallare ASP.NET 4.5.

Le mie ricerche precedenti mi avevano portato a credere che il problema derivi effettivamente da un problema di registrazione con ASP.NET. Con le versioni precedenti di ASP.NET, in realtà esiste un'utilità che è possibile eseguire per registrare ASP.NET senza reinstallarlo, ma sembra che non sia più disponibile.


0

Risolvo il problema aprendo lo studio visivo, ampliando i riferimenti e cambiando la proprietà "Copia locale" in "Vero".

Lo scopro confrontando le DLL della vecchia versione con le DLL della mia nuova versione (che non funzionava)


0

Nel mio caso, la pagina predefinita della mia applicazione era index.html che mancava dalle opzioni del documento predefinite. L'aggiunta ha risolto l'errore 403.14 Forbidden.


0

Nel mio caso il problema è stato causato da ActionFilterAttribute personalizzato che era una sorta di attributo di filtro globale. L'attributo ha istanziato un servizio tramite Autofac ma il servizio è andato in crash nel costruttore:

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

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

0

Nel mio caso né le funzionalità di Windows né aspnet_regiis -inon hanno funzionato. Dopo ore trascorse a scavare in Internet, ho creato la mia soluzione:

  1. In IIS Manager in Modules ho cambiato inherit in local nel nodo UrlRoutingModule-4.0:

    inserisci qui la descrizione dell'immagine

  2. In web.config ho incollato un mix di alcuni suggerimenti da questo forum:

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

Spero che sia d'aiuto

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.