ASP.NET MVC su IIS 7.5


338

Sto eseguendo Windows 7 Ultimate (64 bit) utilizzando Visual Studio 2010 RC. Di recente ho deciso di eseguire VS / eseguire il debug delle mie app su IIS anziché sul server di sviluppo che ne deriva.

Tuttavia, ogni volta che provo a eseguire un'app MVC, viene visualizzato il seguente errore:

Errore HTTP 403.14 - Proibito Il server Web è configurato per non elencare i contenuti di questa directory. dettagliata

Informazioni sull'errore

Modulo DirectoryListingModule

Notifica ExecuteRequestHandler

Handler StaticFile Error

Codice 0x00000000 Richiesto

URL http: // localhost: 80 / mySite /

Percorso fisico C: \ myProject \ mySite \

Metodo di accesso Accesso anonimo

Utente anonimo

Ho inserito un default.aspxfile nella directory e ho ricevuto il seguente errore:

Errore HTTP 500.21 - Il gestore di errori del server interno "PageHandlerFactory-Integrated" ha un modulo errato "ManagedPipelineHandler" nell'elenco dei moduli

Ci sono altri passaggi che ho dimenticato di prendere per farlo funzionare?

Note: ho installato IIS 7.5 dopo aver installato VS 2010 RC. Ho usato il pulsante "Crea directory virtuale" incorporato nella scheda "Web" nelle "Proprietà" del progetto MVC in Visual Studio 2010. Mi sono assicurato che l'applicazione stesse utilizzando il pool di app ASP.NET 4.

Di seguito sono riportate le funzionalità installate di IIS.

testo alternativo


Bene, ho un problema simile e si presenta solo con i siti Web ASP.NET MVC 3. I siti Web ASP.NET MVC 2 funzionano correttamente. Ho inserito un file Default.aspx nella radice del sito Web e questo è stato raccolto bene, nessun problema. Ho distribuito bin il sito Web ASP.NET MVC 3 utilizzando VS2010 SP1 e ancora senza gioia. Sono al mio ingegno con questo.
Umar Farooq Khawaja,

5
Sto riscontrando lo stesso problema. Ho impostato l'applicazione per l'uso di 4.0 integrato, ho eseguito il comando di registrazione per registrare .NET con IIS (7.5) e ottenere ancora questo errore.
Collin White,

2
Ero finalmente in grado di trovare il problema nel mio set up, che era che avevo rinominato il file _Layout.cshtmlper _PageLayout.cshtmle avevo fatto il cambiamento corrispondente _ViewStart.cshtmlpure, ma a quanto pare questo non è stato sufficiente. Una volta ripristinato il nome _Layout.cshtml, ha iniziato a funzionare. Ciò che era confuso è che è _PageLayout.cshtmlstato raccolto correttamente su Win7 a 32 bit ma non è stato raccolto su Win7 a 64 bit o WinSvr2K8 R2.
Umar Farooq Khawaja,

3
Qualcuno ha trovato una soluzione a questo su Windows 8 con IIS 8?
Eric Z Beard,

3
Se siete su Windows Server 2012 o finestra 8 vedono questo: [ stackoverflow.com/questions/12134713/... [1]: stackoverflow.com/questions/12134713/...
Lomak

Risposte:


499

ASP.NET 4 non è stato registrato in IIS. Ho dovuto eseguire il seguente comando nella riga di comando / esecuzione

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

Nota dal commento di David Murdoch:

Che la versione .net è cambiata da quando è stata pubblicata questa risposta. Controllare quale versione del framework si trova nella directory% windir% \ Microsoft.NET \ Framework64 e modificare il comando di conseguenza prima di eseguirlo (al momento è v4.0.30319)


9
Nota il "64" in Framework64 per Windows a 64 bit! che mi ha morso negli * ss. Devo aver installato la versione a 32 bit 4 o 5 volte senza alcun effetto.
Ben Lesh,

14
Che la versione .net è cambiata da quando è stata pubblicata questa risposta. Controllare quale versione del framework si trova nella %windir%\Microsoft.NET\Framework64directory e modificare il comando di conseguenza prima di eseguirlo (attualmente è v4.0.30319).
David Murdoch,

1
da aggiungere a @blesh, se hai 64 bit ed esegui aspnet_regiis.exe a 32 bit, potrebbe semplicemente mostrarti nuovamente le opzioni e non fare nulla
xster

3
Se il comando aspnet_regiis.exe non è presente nella cartella .net framework, scarica il programma di installazione completo .net framework microsoft.com/download/en/…
warrickh, l'

11
Questo non funziona in IIS8 tra l'altro, se si tenta di ottenere "Questa opzione non è supportata su questa versione del sistema operativo. Gli amministratori dovrebbero invece installare / disinstallare ASP.NET 4.5 con IIS8 utilizzando" Attiva / Disattiva funzionalità di Windows " finestra di dialogo, lo strumento di gestione Server Manager o lo strumento da riga di comando dism.exe. Per ulteriori dettagli, consultare go.microsoft.com/fwlink/?LinkID=216771 . "
Mastro,

199

Un'altra cosa da verificare è il seguente set nel tuo web.config:

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

23
Che ha fatto per me. Grazie
boca,

5
Anche risolto per me. Strano che funzioni localmente in VS2010 IIS Express senza quell'impostazione.
Phil

8
Se non si desidera impostare runAllManagedModulesForAllRequests(che funziona anche con file statici) è possibile installare un aggiornamento rapido Microsoft: microsoft.com/download/en/… .
Justin Helgerson,

10
Cerca di evitarlo aggiungendo il modulo di routing: britishdeveloper.co.uk/2010/06/…
Chris Herring,

Se si utilizza VS2013 e si tenta di eseguire IIS 7.5, è necessario aggiungere questo
KenL

77

Assicurati di avere il seguente set nel tuo web.config:

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

Soluzione migliore:

Anche se la soluzione di cui sopra funziona perfettamente , può causare altri problemi in quanto esegue tutti i moduli HTTP registrati su ogni richiesta (anche su ogni richiesta di .jpg .gif .css .html .pdf ecc.) Ed è ovviamente uno spreco di risorse. Anziché

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

Assicurarsi che l'attributo preCondition sia vuoto significa che verrà eseguito su tutte le richieste. [Leggi di più] ( http://www.britishdeveloper.co.uk/2010/06/dont-use-modules-runallmanagedmodulesfo.html , "Leggi post originale")


6
Ciò ha risolto 403.14 sul root e 404 su altri metodi controller per la mia app MVC. C'è ancora qualcosa di sospetto qui, tuttavia, perché ho un'altra app in esecuzione sullo stesso server con le stesse impostazioni del sito visibili e funziona senza questa impostazione. Questo è un web.config creato da un modello di progetto SPA per gentile concessione di VS 2012, che funziona perfettamente sulla mia scatola ma non quando viene pubblicato.
Shannon,

4
Sì, quindi il mio dispositivo di sviluppo conteneva <system.web><httpModules><add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" />, Windows\Microsoft.NET\Framework64\v4.0.30319\Config\web.confige sembrava essere stato modificato alla data della mia installazione di VS 2012. Quindi, la domanda successiva è: cosa c'è nel mio altro progetto che gli sta permettendo di funzionare?
Shannon,

Si noti che a quanto pare non è %windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_regiis.exe -irraccomandato dalla soluzione migliore che imposta qualsiasi impostazione predefinita deve esistere sul mio dispositivo di sviluppo. Questo comando non risolve il problema per me una volta rimosso il riferimento UrlRoutingModule.
Shannon,

Funziona su Windows Server 2008 R2 IIS 7 per ASP.NET MVC 5. Grazie!
Ervi B

42

Un altro motivo per cui qualcuno potrebbe visualizzare questo errore è se il file Global.asax non si trova più nella cartella principale.


4
Sì - il programma di installazione che ho scritto non ha portato questo file. Grazie!
zadam,

4
Anche questo era il mio problema. Non avrei mai immaginato, in base al sintomo 403, che alla mia applicazione mancasse il Global.asax
Saul Dolgin,

3
Ho anche risolto il problema: disattivato la pre-compilazione nelle opzioni di pubblicazione ( global.asaxè interessato solo il file).
Richard,

1
Questo mi ha ingannato. Il fatto è che per me, e sento per molti altri, global.asax viene generato ogni ALTRO volta che pubblico. Qualcuno ha trovato un modo per generarlo ogni volta?
Greg Z.

Grazie, risolto i miei problemi. L'applicazione funziona su ASP.NET MVC 4.0, Framework 4.0. Ospitato su Arvixe.
Joe King,

20

Inoltre stavo ricevendo questo errore e ho scoperto che "Reindirizzamento HTTP" non era attivato in Windows Server. Questo post sul blog lo sottolinea anche: http://blogs.msdn.com/b/rjacobs/archive/2010/06/30/system-web-routing-routetable-not-working-with-iis.aspx


6
Di tutte le dannata cose che avrebbe potuto essere, eccolo. Ho cercato dappertutto e ho giocato con le impostazioni di sicurezza per alcune ore, aspnet_regiis e così via. Dolce bambino Gesù su un rotolo di kaiser friabile.
Andrew Backer

Ho trascorso un'intera giornata per questo. Grazie mille.
Pradeep,

Per Windows 8, ho ancora errori dopo l'attivazione del reindirizzamento HTTP. Ho dovuto fare questo come secondo passo: aggiungere il ruolo ASP.NET 4.5 in Internet Information Services -> World Wide Web Services -> Funzionalità di sviluppo delle applicazioni serverfault.com/questions/514091/…
dreamerkumar

La seconda fermata ha risolto il mio problema. Alcune macchine funzionano senza di essa, ma altre questo è essenziale. Grazie.
Alexis Heijmeijer,

15

Dolce Gesù. Ho provato tutte le cose sopra (ma ho trovato le mie impostazioni identiche). ANCORA UN'ALTRA SOLUZIONE in caso di problemi:

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

Prova a installare questo KB per il tuo sistema. Se vedi 404s potrebbe essere perché non hai questo aggiornamento - e il modulo isapi non viene trovato e non c'è molto che puoi fare a riguardo senza questo!


1
Risolto per me su un server a 32 bit con Server 2008 SP2 (non R2)
Simon C


7

Per me su una VM IIS 8.5 di Azure Server 2012 R2 con un'app Asp.Net MVC 5 (bin MVC 5 distribuito) ho dovuto eseguire le seguenti operazioni da un prompt cmd elevato anche se avevo 4.5 già installato:

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

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

Ho anche installato la forza bruta con tutte le funzionalità di IIS con il seguente PowerShell:

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

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

Ora la mia app funziona.


Il "dism" ha funzionato per me (senza applicare nessuna delle altre modifiche proposte). Ho dovuto solo cambiare l'interruttore '/ all' alla fine per assicurarmi che anche tutte le funzionalità 'genitore' fossero installate.
Jeroen Ritmeijer,

Questo ha funzionato per me. L'esecuzione di MVC 5 con .NET 4.5 su Windows Server 2012. IIS per impostazione predefinita non installa .NET 4.5.
DPac,

6

Un'applicazione MVC è stata spostata su un nuovo server. .NET 4 e MVC 3 sono stati installati, ma abbiamo ancora ricevuto "Errore 403.14". In questo caso, ciò significava che IIS non capiva che aveva a che fare con un'applicazione MVC, stava cercando la pagina predefinita.

La soluzione era semplice: il reindirizzamento HTTP non era installato sul server.

Server Manager - Ruoli - Web Server (IIS) - Servizi ruoli - Reindirizzamento HTTP: non installato. Installato, problema risolto.


1
che cos'è Server Manager? dove lo trovo?
Elad Katz

Server Manager si trova in Strumenti di amministrazione
udog

5

Inoltre, se l'app è precompilata, dovresti averla

PrecompiledApp.config

nella cartella principale della tua app, altrimenti potresti anche ottenere HTTP Error 403.14.


Ho avuto il file lì per qualche motivo anche se la mia app non è precompilata. Eliminato il file e funziona ora. Grazie!
vaindil,

Sarei davvero felice se vedessi questa risposta prima di passare 2 ore e risolverla da solo ..
Sotn

4

Un'altra possibile soluzione, se ti sposti su global.asax, assicurati che il markup punti alla classe MvcApplication corretta. Spero che questo salverà qualcuno in futuro.


4

Avevo usato l'estensione IIS di WebDeploy per importare i miei siti Web da IIS6 a IIS7.5, quindi tutte le impostazioni di IIS erano esattamente come in ambiente di produzione. Dopo aver provato tutte le soluzioni fornite qui, nessuna delle quali ha funzionato per me, ho semplicemente dovuto modificare le impostazioni del pool di app per il sito Web da Classico a Integrato.


4

Ho incontrato improvvisamente lo stesso problema 404.14. Infine, il problema era stato risolto deselezionando "precompilare durante la pubblicazione" nelle impostazioni del profilo di pubblicazione.


Anch'io. La pubblicazione non è stata un problema fino ad oggi: deselezionarla è stata risolta. Strano comunque
Sir Rufo,

4

Ho modificato il mio percorso predefinito in un punto da:

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

Per:

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

Il che mi ha dato il tuo errore. Sono contento che qualcuno abbia menzionato il routing perché probabilmente sarei stato su questo per sempre.


4

Nel mio caso ASP.NET 4.5 non è installato sul server, quindi l'installazione di ASP.NET 4.5 ha risolto il problema.


4

È possibile risolvere questo errore eseguendo cmd come admin di inserisci qui la descrizione dell'immagine

Fai come nella foto per Windows a 32 bit

Apporta le modifiche a 64 bit come framework64 anziché solo framework Di vai su iis e aggiorna il sito
Se hai ancora qualche errore apporta modifiche nel pool di applicazioni


3

Ho avuto un altro problema che ha portato a questo problema.

  • Mi ero assicurato che il mio pool di app eseguisse .net 4 in modalità integrata
  • Avevo eseguito aspnet_regiis.exe -i
  • Avevo verificato che le autorizzazioni per le cartelle fossero impostate correttamente per l'account che eseguiva il mio pool di app

Nessuna di queste cose ha funzionato. Si è scoperto che nel mio web.config in system.webserver> moduli ho avuto il seguente:

<remove name="WindowsAuthentication" />

Ovviamente questo ha rimosso il modulo di autenticazione di Windows che sembrava in qualche modo mettere tutto fuori gioco.

Spero che questo aiuti qualcuno, dato che mi è costato gran parte della serata!


3

L'interfaccia utente è leggermente diversa nelle versioni più recenti di Windows Server. Qui è dove devi abilitare ASP.Net per farlo funzionare su IIS

Correggi IIS e Asp.net


2

Aggiunta di un'altra soluzione per questo problema.

nel mio file Global.asax.cs avevo disabilitato i file php tentati da essere consumati dalla pipeline MVC usando quanto segue:

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

Avevo già fatto questi in precedenza in un progetto MVC2 e ha funzionato bene, ma farlo nella mia app MVC 3 ha causato il problema sopra riportato.


2

Ancora un altro motivo per cui ciò può accadere: il tuo RouteConfig.cso WebApiConfig.csnon sono validi.

Nel mio caso, avevo un percorso definito come tale (notare la parentesi anziché la parentesi graffa):

...
routeTemplate: "api/(something}"
...

Per me funziona! Nel caso in cui sono cambiato routes.MapRoute( name:"Default", url:"{controller}/{action}/{repositoryId}", defaults:new { controller = "Account", action = "Login", id = UrlParameter.Optional } );. Quando ho risolto id = UrlParameter.Optionalil repositoryId = UrlParameter.Optionalproblema, inizia a funzionare!
Dmitresky

2

Si noti che per gli utenti di Windows 8 è necessario aggiungere / rimuovere i componenti di Windows e rimuovere la versione di .net riavviare quindi reinstallare per registrarlo con IIS. Presumo che ciò accada se si ottiene .net 4.5 da Visual Studio e successivamente si installa IIS.


2

Per quanto strano possa sembrare, reinstallare IIS è stato ciò che ha funzionato per me, con il seguente comando eseguito dalla cartella della versione .net:

aspnet_regiis.exe /i

inserisci qui la descrizione dell'immagine

Quando ho eseguito questo comando per la prima volta, ho iniziato a ricevere l'errore HTTP 403.14. Ma una volta eseguito nuovamente il comando ha risolto il problema.

Obs : Un'altra cosa che ho fatto è stata anche quella di rimuovere il reindirizzamento HTTP dalle funzionalità del server nella schermata Gestione server prima di reinstallare IIS. Forse anche questo ha avuto un impatto nel risolvere il problema, ma non ne sono sicuro. Pertanto, se la reinstallazione di IIS continua a non funzionare, provare a rimuovere il reindirizzamento HTTP e riprovare. Spero che possa funzionare anche per te.


FYI aspnet_regiis.exenon installa o reinstalla IIS, registra solo una particolare versione di .NET framework, in modo che possa essere utilizzata da IIS per le applicazioni di hosting.
stephen,

1

Per risolvere questo problema senza ricorrere alla modalità a 32 bit, dovrai aggiornare il codice sorgente per questo progetto

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

Ho sollevato questo problema come discussione nel forum di discussione del progetto codeplex cloud IT.

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


1

Questo ha funzionato per me e potrebbe essere utile a un altro.

Forse tutti i componenti richiesti non sono presenti o / e non tutti sono registrati correttamente. Per risolvere questo problema, prova a deselezionare tutte le opzioni all'interno del Pannello di controllo -> Attiva o disattiva le funzionalità di Windows -> Internet Information Services -> World Wide Web Services -> Funzionalità di sviluppo delle applicazioni, deseleziona tutte le opzioni e ricontrolla tutto quindi reimposta IIS e controlla se il problema è stato risolto.

inserisci qui la descrizione dell'immagine


1

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 host locale nel file host per tornare al tuo computer locale e quindi punta un nuovo sito Web IIS locale a quella cartella (con la corrispondente voce di intestazione host) scoprirai che funziona allora.


0

Ho creato un nuovo spazio dei nomi (e quindi una cartella) identico al percorso verso un controller (ad es. MvcApp/Test/SomeClasses.csE MvcApp/Controllers/TestController.cs). Ciò ha comportato anche un 403.14!


0

Per me, la soluzione è stata quella di aggiungere il mio pacchetto NuGet Microsoft.AspNet.WebPages (più le dipendenze Razor e Infrastruttura) al mio progetto web.

L'infrastruttura ha dovuto essere reinstallata con forza poiché inizialmente non è stata aggiunta come riferimento.


0

Nel mio caso, la versione .NET CRL nel prppertires del pool di applicazioni era impostata su Nessun codice gestito (non so perché). L'impostazione su .NET CRL Versione v4.0.30319 ha risolto il problema.

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.