.net 4.0 - ASP.NET MVC su IIS 7.5




.net-4.0 iis-7.5 (19)

Sto usando Windows 7 Ultimate (64 bit) usando Visual Studio 2010 RC. Recentemente ho deciso di far eseguire / eseguire il debug delle mie app su IIS piuttosto che sul server di sviluppo che viene fornito con esso.

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

Errore HTTP 403.14 - Proibito Il server Web è configurato per non elencare il contenuto di questa directory. dettagliato

Informazioni sull'errore

Modulo DirectoryListingModule

Notifica ExecuteRequestHandler

Errore di StaticFile del gestore

Codice 0x00000000 Richiesto

URL http: // localhost: 80 / mySite /

Percorso fisico C: \ myProject \ mySite \

Metodo di accesso Accesso anonimo

Utente anonimo

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

Errore HTTP 500.21 - Gestore errori server interno "PageHandlerFactory-Integrated" ha un modulo non valido "ManagedPipelineHandler" nell'elenco dei moduli

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

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

Di seguito sono le funzionalità installate di IIS che ho.


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

Windows a 32 bit (x86)

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

Windows a 64 bit (x64)

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

Nota dal commento di David Murdoch:

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


Abbiamo trasferito un'applicazione MVC su un nuovo server. .NET 4 e MVC 3 sono stati installati, ma abbiamo ancora "Errore 403.14". In questo caso, ciò significava che IIS non capiva che si trattava di un'applicazione MVC, cercava la pagina predefinita.

La soluzione era semplice: HTTP Redirection non era installato sul server.

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


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

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

Soluzione migliore:

Anche se la soluzione sopra funziona perfettamente , può causare altri problemi poiché 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>

Assicurati che l'attributo preCondition sia vuoto significa che verrà eseguito su tutte le richieste. [Leggi di più] ( britishdeveloper.co.uk/2010/06/… , "Leggi il post originale")


Avevo utilizzato 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 erano state nell'ambiente di produzione. Dopo aver provato tutte le soluzioni fornite qui, nessuna delle quali ha funzionato per me, ho semplicemente dovuto modificare l'impostazione del pool di app per il sito Web da Classic a Integrated.


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

  • Mi ero assicurato che il mio pool di app fosse in esecuzione .net 4 in modalità integrata
  • Avevo eseguito aspnet_regiis.exe -i
  • Ho controllato che le autorizzazioni della cartella 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 sotto system.webserver> moduli avevo il seguente:

<remove name="WindowsAuthentication" />

Ovviamente questo rimosse il modulo di autenticazione di Windows che sembrava in qualche modo rovesciare tutto.

Spero che questo aiuti qualcuno, in quanto mi è costato la maggior parte della serata!


Ho creato un nuovo spazio dei nomi (e quindi una cartella) identico alla rotta verso un controller (es. MvcApp/Test/SomeClasses.cs e MvcApp/Controllers/TestController.cs ). Ciò ha comportato anche un 403,14!


Ho modificato la mia rotta predefinita in un punto da:

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

A:

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

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


Inoltre puoi passare ad AppPool in modalità integrata . Grazie a Michael Bianchi ( https://.com/a/7956546/1143515 ), voglio solo sottolineare questo.


Inoltre, se la tua app è precompilata, dovresti farlo

PrecompiledApp.config

nella cartella radice della tua app altrimenti potresti ottenere anche l' HTTP Error 403.14 .


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


Nel mio caso, la versione .NET CRL nei prppertires del pool di applicazioni è stata impostata su Nessun codice gestito (non so perché). Impostandolo su .NET CRL Versione v4.0.30319 risolto il problema.


Per gli utenti di Windows 8 è necessario aggiungere / rimuovere componenti di Windows e rimuovere la versione di .net reboot, quindi reinstallarla per poterla registrare con IIS. Presumo che ciò accada se ottieni .net 4.5 da Visual Studio e successivamente installa IIS.


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

L'infrastruttura doveva essere forzatamente reinstallata in quanto inizialmente non era stata aggiunta come riferimento.


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

aspnet_regiis.exe /i

Quando eseguo per la prima volta questo comando, 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 di rimuovere HTTP Redirect dalle funzionalità del server nella schermata Gestione server prima di reinstallare IIS. Forse anche questo ha avuto un impatto nella risoluzione del problema, ma non ne sono sicuro. Quindi, se la reinstallazione di IIS continua a non funzionare, prova a rimuovere Redirect HTTP e riprova. Spero che possa funzionare anche per te.


Puoi risolvere questo errore eseguendo cmd come amministratore di

Fai lo stesso come in foto per Windows 32 bit

Basta apportare modifiche a 64 bit come framework64 invece di solo framework Than go to iis e aggiornare il sito
Se hai ancora qualche errore, apporta modifiche nel pool di applicazioni


Questo ha funzionato per me e potrebbe essere utile per 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 in Pannello di controllo -> Attiva o disattiva le funzionalità di Windows -> Internet Information Services -> Servizi Web -> Funzionalità di sviluppo applicazioni, deseleziona tutte le opzioni e ricontrolla tutto, quindi ripristina IIS e controlla se il problema è risolto.


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


Un altro motivo per cui questo può accadere: RouteConfig.cs o WebApiConfig.cs non sono validi.

Nel mio caso, ho avuto un percorso definito come tale (notare la parentesi invece di parentesi graffa):

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

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





iis-7.5