ASP.NET MVC sur IIS 7.5

338

J'utilise Windows 7 Ultimate (64 bits) à l'aide de Visual Studio 2010 RC. J'ai récemment décidé d'avoir VS exécuter / déboguer mes applications sur IIS plutôt que le serveur de développement qui l'accompagne.

Cependant, chaque fois que j'essaie d'exécuter une application MVC, j'obtiens l'erreur suivante:

Erreur HTTP 403.14 - Interdit Le serveur Web est configuré pour ne pas répertorier le contenu de ce répertoire. Détaillé

Informations sur l'erreur

Module DirectoryListingModule

Notification ExecuteRequestHandler

Erreur StaticFile du gestionnaire

Code 0x00000000 demandé

URL http: // localhost: 80 / mySite /

Chemin physique C: \ myProject \ mySite \

Méthode de connexion Ouverture de session anonyme

Utilisateur anonyme

J'ai placé un default.aspxfichier dans le répertoire et j'ai reçu l'erreur suivante:

Erreur HTTP 500.21 - Le gestionnaire d'erreurs du serveur interne "PageHandlerFactory-Integrated" a un mauvais module "ManagedPipelineHandler" dans sa liste de modules

Y a-t-il d'autres étapes que j'ai oublié de prendre pour que cela fonctionne?

Remarques: J'ai installé IIS 7.5 après avoir installé VS 2010 RC. J'ai utilisé le bouton intégré "Créer un répertoire virtuel" sous l'onglet "Web" dans les "Propriétés" du projet MVC dans Visual Studio 2010. Je me suis assuré que l'application utilise le pool d'applications ASP.NET 4.

Voici les fonctionnalités installées d'IIS que j'ai.

texte alternatif

Omar
la source
D'accord, j'ai un problème similaire et il n'apparaît qu'avec les sites Web ASP.NET MVC 3. Les sites Web ASP.NET MVC 2 fonctionnent correctement. J'ai placé un fichier Default.aspx à la racine du site Web et il a été récupéré correctement, pas de problème. J'ai bin-déployé le site Web ASP.NET MVC 3 en utilisant VS2010 SP1 et toujours sans joie. Je suis à bout de souffle avec ça.
Umar Farooq Khawaja
5
J'ai ce même problème. J'ai défini l'application pour utiliser 4.0 intégrée, j'ai exécuté la commande d'enregistrement pour enregistrer .NET avec IIS (7.5) et j'ai toujours cette erreur.
Collin White
2
J'ai enfin pu trouver le problème dans mon jeu en place, ce qui était que j'avais renommé le fichier _Layout.cshtmlà _PageLayout.cshtmlet avait fait le changement correspondant _ViewStart.cshtmlaussi bien, mais apparemment cela ne suffisait pas. Une fois que j'ai rétabli le nom _Layout.cshtml, il a commencé à fonctionner. Ce qui a été déroutant, c'est qu'il _PageLayout.cshtmla été correctement récupéré sur Win7 32 bits mais n'a pas été récupéré sur Win7 64 bits ou WinSvr2K8 R2.
Umar Farooq Khawaja
3
Quelqu'un at-il trouvé une solution à cela sur Windows 8 avec IIS 8?
Eric Z Beard
3
Si vous utilisez Windows Server 2012 ou Windows 8, voyez ceci: [ stackoverflow.com/questions/12134713/… [1]: stackoverflow.com/questions/12134713/…
Lomak

Réponses:

499

ASP.NET 4 n'était pas enregistré dans IIS. J'ai dû exécuter la commande suivante dans la ligne de commande / exécuter

Windows 32 bits (x86)

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

Windows 64 bits (x64)

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

Note du commentaire de David Murdoch:

Que la version .net a changé depuis la publication de cette réponse. Vérifiez quelle version du framework se trouve dans le répertoire% windir% \ Microsoft.NET \ Framework64 et modifiez la commande en conséquence avant de l'exécuter (il s'agit actuellement de la v4.0.30319)

Omar
la source
9
Notez le "64" dans Framework64 pour Windows 64 bits! qui m'a mordu dans les * ss. J'ai dû installer la verion 32 bits 4 ou 5 fois sans effet.
Ben Lesh
14
Que la version .net a changé depuis la publication de cette réponse. Vérifiez la version du framework dans le %windir%\Microsoft.NET\Framework64répertoire et modifiez la commande en conséquence avant de l'exécuter (il s'agit actuellement de la v4.0.30319).
David Murdoch
1
pour ajouter à @blesh, si vous avez 64 bits et exécutez aspnet_regiis.exe 32 bits, il pourrait simplement vous montrer à nouveau les options et ne rien faire
xster
3
Si la commande aspnet_regiis.exe est manquante dans le dossier du framework .net, téléchargez le programme d'installation complet du framework .net microsoft.com/download/en/…
warrickh
11
Cela ne fonctionne pas dans IIS8 btw, si vous essayez d'obtenir "Cette option n'est pas prise en charge sur cette version du système d'exploitation. Les administrateurs doivent plutôt installer / désinstaller ASP.NET 4.5 avec IIS8 en utilisant" Activer / désactiver les fonctionnalités Windows ". , l'outil de gestion du Gestionnaire de serveur ou l'outil de ligne de commande dism.exe. Pour plus de détails, consultez go.microsoft.com/fwlink/?LinkID=216771 . "
Mastro
199

Une autre chose à vous assurer est l'ensemble suivant dans votre web.config:

<system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/> 
</system.webServer>
Mark Boltuc
la source
23
Ça l'a fait pour moi. Merci
boca
5
Aussi résolu pour moi. Étrange, il fonctionne localement dans VS2010 IIS Express sans ce paramètre.
Phil
8
Si vous ne souhaitez pas définir runAllManagedModulesForAllRequests(qui s'exécute même pour les fichiers statiques), vous pouvez installer un correctif Microsoft: microsoft.com/download/en/… .
Justin Helgerson
10
Essayez d'éviter cela en ajoutant le module de routage: britishdeveloper.co.uk/2010/06/…
Chris Herring
Si vous utilisez VS2013 et essayez d'exécuter sur IIS 7.5 - vous devez ajouter ceci
KenL
77

Assurez-vous que vous disposez de l'ensemble suivant dans votre web.config:

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

Meilleure solution:

Même si la solution ci-dessus fonctionne parfaitement , elle peut causer d'autres problèmes car elle exécute tous vos modules HTTP enregistrés sur chaque demande (même sur chaque demande de .jpg .gif .css .html .pdf etc.) et c'est évidemment un gaspillage de ressources. Au lieu

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

Assurez-vous que l'attribut preCondition est vide signifie qu'il s'exécutera sur toutes les demandes. [En savoir plus] ( http://www.britishdeveloper.co.uk/2010/06/dont-use-modules-runallmanagedmodulesfo.html , "Read original post")

Premchandra Singh
la source
6
Cela a corrigé le 403.14 à la racine et le 404 sur d'autres méthodes de contrôleur pour mon application MVC. Il y a toujours quelque chose de louche ici, cependant, car j'ai une autre application en cours d'exécution sur le même serveur avec les mêmes paramètres de site visibles, et cela fonctionne sans ce paramètre. Il s'agit d'un fichier web.config créé par un modèle de projet SPA avec l'aimable autorisation de VS 2012, qui fonctionne bien sur ma boîte mais pas lorsqu'il est publié.
Shannon
4
Oui, donc mon périphérique de développement contenait <system.web><httpModules><add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" />, Windows\Microsoft.NET\Framework64\v4.0.30319\Config\web.configet semblait avoir été modifié à la date de mon installation VS 2012. Donc, la question suivante est, qu'est-ce qui, dans mon autre projet, lui permet de fonctionner?
Shannon
Notez que ce n'est apparemment pas la %windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_regiis.exe -irsolution recommandée par la meilleure solution qui définit les paramètres par défaut qui doivent exister sur mon périphérique de développement. Cette commande ne résout pas le problème pour moi une fois que j'ai supprimé la référence UrlRoutingModule.
Shannon
Cela fonctionne sur Windows Server 2008 R2 IIS 7 pour ASP.NET MVC 5. Merci!
Ervi B
42

Une autre raison pour laquelle quelqu'un pourrait obtenir cette erreur est que le fichier Global.asax ne se trouve plus dans le dossier racine.

ZippyV
la source
4
Oui - le programme d'installation que j'ai écrit n'a pas transmis ce fichier. Merci!
zadam
4
C'était aussi mon problème. Je n'aurais jamais deviné sur la base du symptôme 403 que mon application manquait le Global.asax
Saul Dolgin
3
Également corrigé pour moi: désactivation de la pré-compilation dans les options de publication ( global.asaxseul le fichier est affecté).
Richard
1
Cela m'a trompé. Le fait est que pour moi, et j'entends pour beaucoup d'autres, global.asax est généré chaque AUTRE fois que je publie. Quelqu'un a-t-il trouvé un moyen de le générer à chaque fois?
Greg Z.
Merci, résolu mes problèmes. L'application s'exécute sur ASP.NET MVC 4.0, Framework 4.0. Hébergé sur Arvixe.
Joe King
20

Je recevais également cette erreur et j'ai découvert que la "redirection HTTP" n'était pas activée dans Windows Server. Cet article de blog le souligne également: http://blogs.msdn.com/b/rjacobs/archive/2010/06/30/system-web-routing-routetable-not-working-with-iis.aspx

toddkitta
la source
6
De toutes les fichues choses que ça aurait pu être, c'est ça. J'ai regardé partout et j'ai joué avec les paramètres de sécurité pendant quelques heures, aspnet_regiis, et ainsi de suite. Doux bébé Jésus sur un rouleau de kaiser friable.
Andrew Backer
J'ai passé une journée entière pour ça. Merci beaucoup.
Pradeep
Pour Windows 8, j'ai toujours des erreurs après avoir activé la redirection HTTP. J'ai dû faire cela comme une deuxième étape: ajouter un rôle ASP.NET 4.5 sous Services Internet (IIS) -> Services World Wide Web -> Fonctionnalités de développement d'applications serverfault.com/questions/514091/…
dreamerkumar
Le deuxième arrêt a résolu mon problème. Certaines machines fonctionnent sans, mais d'autres, c'est essentiel. Merci.
Alexis Heijmeijer
15

Doux Jésus. J'ai essayé toutes les choses ci-dessus (mais j'ai trouvé mes paramètres identiques). ENCORE UNE AUTRE SOLUTION si vous rencontrez des problèmes:

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

Essayez d'installer ce KB pour votre système. Si vous voyez des 404, c'est peut-être parce que vous n'avez pas cette mise à jour - et le module isapi n'est tout simplement pas trouvé et vous ne pouvez pas faire grand-chose sans cela!

Sean Anderson
la source
1
Résolu pour moi sur un serveur 32 bits exécutant Server 2008 SP2 (pas R2)
Simon C
7

Pour moi sur une machine virtuelle Azure Server 2012 R2 IIS 8.5 avec une application Asp.Net MVC 5 (bin déployé MVC 5), j'ai dû faire ce qui suit à partir d'une invite cmd élevée même si j'avais déjà 4.5 installé:

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

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

J'ai également installé par force brute toutes les fonctionnalités IIS avec le PowerShell suivant:

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

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

Maintenant, mon application fonctionne.

Jon Kragh
la source
Le «dism» a fonctionné pour moi (sans appliquer aucun des autres changements proposés). J'ai juste dû basculer le commutateur «/ all» à la fin pour m'assurer que toutes les fonctionnalités «parent» étaient également installées.
Jeroen Ritmeijer
Cela a fonctionné pour moi. Exécuter MVC 5 avec .NET 4.5 sur Windows Server 2012. IIS par défaut n'installe pas .NET 4.5.
DPac
6

Nous avons fait déplacer une application MVC vers un nouveau serveur. .NET 4 et MVC 3 ont été installés, mais nous avons toujours eu «Erreur 403.14». Dans ce cas, cela signifiait que IIS ne comprenait pas qu'il s'agissait d'une application MVC, il cherchait la page par défaut.

La solution était simple: la redirection HTTP n'était pas installée sur le serveur.

Gestionnaire de serveur - Rôles - Serveur Web (IIS) - Services de rôles - Redirection HTTP: non installé. Installé, problème résolu.

Bjarne Havnen
la source
1
qu'est-ce que le Gestionnaire de serveur? où le trouve-t-on?
Elad Katz
Le gestionnaire de serveur se trouve dans les outils d'administration
udog
5

De plus, si votre application est précompilée, vous devriez avoir

PrecompiledApp.config

dans le dossier racine de votre application, sinon vous pourriez également l'obtenir HTTP Error 403.14.

pvasek
la source
J'avais le fichier là pour une raison quelconque, même si mon application n'est pas précompilée. Supprimé le fichier et cela fonctionne maintenant. Je vous remercie!
vaindil
Je serais vraiment heureux si je voyais cette réponse avant de passer 2 heures et de la résoudre par moi-même ..
sotn
4

Une autre solution possible, si vous vous déplacez dans votre global.asax, assurez-vous que le balisage pointe vers la classe MvcApplication correcte. Espérons que cela sauvera quelqu'un à l'avenir.

AaronHS
la source
4

J'avais utilisé l'extension WebDeploy IIS pour importer mes sites Web d'IIS6 vers IIS7.5, donc tous les paramètres IIS étaient exactement comme ils l'avaient été dans l'environnement de production. Après avoir essayé toutes les solutions fournies ici, dont aucune ne fonctionnait pour moi, j'ai simplement dû changer le paramètre App Pool pour le site Web de Classic à Integrated.

Michael Bianchi
la source
4

J'ai rencontré le même problème 404.14 soudainement. Enfin, le problème avait été résolu en décochant "précompiler lors de la publication" dans les paramètres du profil de publication.

user985287
la source
Pareil ici. La publication n'était pas un problème jusqu'à aujourd'hui - décocher l'a résolu. Étrange quand même
Sir Rufo
4

J'ai modifié mon itinéraire par défaut à un moment donné de:

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

À:

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

Ce qui m'a donné ton erreur. Heureux que quelqu'un ait mentionné le routage parce que j'aurais probablement été là-dessus pour toujours.

Nate-Wilkins
la source
4

Dans mon cas, ASP.NET 4.5 n'est pas installé sur le serveur, donc l'installation d'ASP.NET 4.5 a résolu le problème.

Saif
la source
4

Vous pouvez résoudre cette erreur en exécutant cmd en tant qu'administrateur entrez la description de l'image ici

Faites la même chose que dans l'image pour Windows 32 bits

Apportez simplement des modifications en 64 bits en tant que framework64 au lieu du framework uniquement.Allez à iis et actualisez le site
.


la source
3

J'ai eu un autre problème qui a conduit à ce problème.

  • Je m'étais assuré que mon pool d'applications exécutait .net 4 en mode intégré
  • J'avais exécuté aspnet_regiis.exe -i
  • J'ai vérifié que les autorisations de dossier étaient correctement définies pour le compte exécutant mon pool d'applications

Aucune de ces choses n'a fonctionné. Il s'est avéré que dans mon web.config sous system.webserver> modules, j'avais les éléments suivants:

<remove name="WindowsAuthentication" />

De toute évidence, cela a supprimé le module d'authentification Windows qui semblait en quelque sorte tout renverser.

J'espère que cela aide quelqu'un, car cela m'a coûté la plupart d'une soirée!

Paul Suart
la source
3

L'interface utilisateur est un peu différente dans les nouvelles versions de Windows Server. Voici où vous devez activer ASP.Net pour le faire fonctionner sur IIS

Fix IIS & Asp.net

Matthew Zourelias
la source
2

Ajout d'une autre solution à ce problème.

dans mon fichier Global.asax.cs, j'avais désactivé la tentative de consommation de fichiers php par le pipeline MVC en utilisant les éléments suivants:

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

Je l'avais déjà fait dans un projet MVC2 et cela a bien fonctionné, mais cela dans mon application MVC 3 a provoqué le problème signalé ci-dessus.

TheRightChoyce
la source
2

Encore une autre raison pour laquelle cela peut se produire - votre RouteConfig.csouWebApiConfig.cs n'est pas valide.

Dans mon cas, j'avais un itinéraire défini comme tel (notez la parenthèse au lieu de l'accolade):

...
routeTemplate: "api/(something}"
...
Terry
la source
Ça marche pour moi! Au cas où j'aurais changé routes.MapRoute( name:"Default", url:"{controller}/{action}/{repositoryId}", defaults:new { controller = "Account", action = "Login", id = UrlParameter.Optional } );. Lorsque je fixe id = UrlParameter.Optionalsur repositoryId = UrlParameter.Optionalelle commencer à travailler!
Dmitresky
2

Veuillez noter que pour les utilisateurs de Windows 8, vous devez ajouter / supprimer des composants Windows et supprimer la version du redémarrage .net, puis réinstaller afin de l'enregistrer auprès d'IIS. Je suppose que cela se produit si vous obtenez .net 4.5 à partir de Visual Studio et installez IIS par la suite.

Lee.Winter
la source
2

Aussi étrange que cela puisse paraître, la réinstallation d'IIS a été ce qui a fonctionné pour moi, avec la commande suivante exécutée à l'intérieur du dossier de version .net:

aspnet_regiis.exe /i

entrez la description de l'image ici

Lorsque j'ai exécuté cette commande pour la première fois, j'ai commencé à obtenir l'erreur HTTP 403.14. Mais une fois que j'ai exécuté à nouveau la commande, cela a résolu le problème.

Obs : Une autre chose que j'ai également faite a été de supprimer HTTP Redirect des fonctionnalités du serveur dans l'écran de gestion du serveur avant de réinstaller IIS. Peut-être que cela a également eu un impact sur la résolution du problème, mais je ne suis pas sûr. Par conséquent, si la réinstallation d'IIS ne fonctionne toujours pas, essayez de supprimer HTTP Redirect et réessayez. J'espère que cela fonctionnera aussi pour vous.

Ulysse Alves
la source
FYI aspnet_regiis.exen'installe ni ne réinstalle IIS, il enregistre simplement une version particulière du framework .NET, afin qu'il puisse être utilisé par IIS pour l'hébergement d'applications.
stephen
1

Pour résoudre ce problème sans avoir à recourir au mode 32 bits, vous devrez mettre à jour le code source de ce projet

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

J'ai soulevé cette question en tant que discussion sur le forum de discussion du projet de codeplex cloud informatique.

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

Omar
la source
1

Cela a fonctionné pour moi et cela pourrait être utile à un autre.

Peut-être que tous les composants requis ne sont pas présents ou / et que tous ne sont pas enregistrés correctement. Pour résoudre ce problème, essayez de décocher toutes les options dans le Panneau de configuration -> Activer ou désactiver les fonctionnalités Windows -> Services Internet (IIS) -> Services World Wide Web -> Fonctionnalités de développement d'applications, décochez toutes les options et revérifiez toutes, puis réinitialisez IIS et vérifiez si le problème est résolu.

entrez la description de l'image ici

MirlvsMaximvs
la source
1

Si vous exécutez IIS 8.5 sur Windows 8 ou Server 2012, vous constaterez peut-être que l'exécution de mvc 4/5 (.net 4.5) ne fonctionne pas dans un répertoire virtuel. Si vous créez une entrée d'hôte local dans le fichier hôte pour pointer vers votre ordinateur local, puis pointez un nouveau site Web IIS local vers ce dossier (avec l'entrée d'en-tête d'hôte correspondante), vous constaterez que cela fonctionne alors.

Mastro
la source
0

J'ai créé un nouvel espace de noms (et donc un dossier) identique à la route vers un contrôleur (par exemple MvcApp/Test/SomeClasses.cset MvcApp/Controllers/TestController.cs). Cela a également donné lieu à un 403.14!

Papa Mufflon
la source
0

Pour moi, la solution consistait à ajouter le package NuGet Microsoft.AspNet.WebPages (plus ses dépendances Razor et Infrastructure) à mon projet Web.

L'infrastructure a dû être réinstallée de force car elle n'a pas été ajoutée comme référence au départ.

Mathieu Diepman
la source
0

Dans mon cas, la version .NET CRL du prppertires du pool d'applications a été définie sur Aucun code managé (je ne sais pas pourquoi). La définition de .NET CRL version v4.0.30319 a résolu le problème.

Eugene Rozhkov
la source