Erreur HTTP MVC4 403.14 – Interdit

J’ai créé une application Web .net4.5 ASP.NET MVC4 qui fonctionne bien localement (serveur IIS Express & dev), mais une fois que je l’ai déployé sur mon serveur Web, il génère l’erreur 403. J’ai installé .Net 4.5RC sur le serveur et aspnet_regiis -i même essayé le bit aspnet_regiis -i que tout le monde recommandait pour ses problèmes avec les versions précédentes de MVC / .Net, mais cela n’a pas aidé.

Des idées?

EDIT : Plus d’infos sur la situation. Le serveur est en 32 bits et j’ai 4 autres applications MVC3 qui fonctionnent correctement. C’est juste mon application MVC4 qui ne fonctionne pas.

Erreur 403.14 est le code d’erreur HTTP pour ne pas être autorisé à répertorier le contenu d’un répertoire. S’il vous plaît être sûr que

  1. Vous avez configuré le site Web en tant qu’application dans IIS
  2. Vous avez installé .NET 4.5 sur le serveur
  3. Vous avez configuré le pool d’applications pour qu’il exécute la version appropriée du framework .NET (autrement dit, il n’est pas défini sur .NET 2.0).
  4. Vous utilisez le pipeline intégré sur votre pool d’applications
  5. .NET 4.5 est en fait enregistré dans IIS. S’il vous plaît voir ce post pour un problème / résolution similaire

Habituellement, a et d sont les plus gros problèmes entourant les déploiements MVC sur IIS

Peut-être … Si vous utilisez l’Assistant de publication (comme je l’ai fait) et sélectionnez la case à cocher “Précomstackr pendant la publication” (comme je l’ai fait) et voyez les mêmes symptômes …

Oui, je me suis cassé la tête, mais après avoir décoché cette case, un paramètre apparemment sans rapport, tous les symptômes décrits disparaissent après le redéploiement.

J’espère que cela corrige certaines personnes.

Windows-> Démarrer -> Activer et désactiver les fonctionnalités veuves

Assurez-vous de vérifier les options requirejses dans

entrer la description de l'image ici

Avant d’appliquer

 runAllManagedModulesForAllRequests="true"/> 

considérez le lien ci-dessous qui suggère une alternative moins drastique. Dans le post, l’auteur propose la modification suivante au fichier web.config local:

       

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

Il y a un Refactor -> Rename Bug dans Visual Studio 2012 qui a renommé à tort le “id” dans la valeur de chaîne littérale du paramètre url dans mon RouteConfig.cs. Cela a provoqué un 403.14 sur une configuration nouvelle et correcte dans Windows Server 2012 et Windows Server 2008 R2.

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

a été changé pour

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

Vous pouvez également obtenir un fichier 403 si, lors du test avec le serveur dev, vous utilisez le pipeline intégré et que vous l’installez en mode pipeline classique sur votre serveur Web IIS 7.5, mon dossier app_data était également manquant.

Si vous exécutez IIS 8.5 sur Windows 8 ou Server 2012, il se peut 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 correspondant), vous constaterez qu’il fonctionne.

    

U peut utiliser le code ci-dessus

J’avais défini le pool d’applications de la nouvelle application sur DefaultAppPool dans IIS, qui utilise évidemment le pipeline Classic avec .NET v.2.0 .

Pour résoudre le problème, j’ai créé un nouveau pool d’applications à l’aide du pipeline Integrated et de .NET v4.0 . juste pour cette nouvelle application et puis tout a commencé à fonctionner comme prévu.

N’oubliez pas d’atsortingbuer ce nouveau pool d’applications à l’application. Sélectionnez l’application dans IIS, cliquez sur Basic Settings , puis choisissez le nouveau pool d’applications pour l’application.

celui que je vois plus fréquemment récemment est IIS et permet aux applications 32bit de fonctionner

Est-ce ce que vous avez essayé? sinon nous avons besoin de plus d’informations sur les versions de serveur de production et de développement

J’ai un problème un peu différent, sur le serveur 2012, j’ai oublié d’activer asp.net 4.5. Si vous avez ce problème, vérifiez que vous l’avez activé.

J’exécute Windows Server 2012 R2 sur Azure et ASP.NET 4.5, IIS 8

J’ai résolu ce problème en désinstallant tous les éléments ASP.NET dans Programmes et fonctionnalités, puis en réinstallant ASP.NET comme celui-ci avec le Gestionnaire de serveur à l’aide de l’option Ajouter des rôles et des fonctionnalités: choisissez mon serveur, puis pour Sélectionner le rôle de serveur choisi Serveur Web (IIS) / Serveur Web / Développement d’applications, cliquez sur ASP.NET 4.5, confirmez l’installation de la configuration requirejse, puis réinstallez ASP.NET 4.5.

Mes recherches précédentes m’ont amené à penser que le problème provient en fait d’un problème d’enregistrement avec ASP.NET. Avec les versions antérieures d’ASP.NET, il existe en fait un utilitaire que vous pouvez exécuter pour enregistrer ASP.NET sans réinstaller, mais cela ne semble plus être disponible.

Je résous le problème en ouvrant le studio visuel, en développant les références et en changeant la propriété “Copie locale” en “Vrai”.

Je découvre cela en comparant les DLL de l’ancienne version avec les Dll de ma nouvelle version (qui ne fonctionnait pas)

Dans mon cas, la page par défaut de mon application était index.html, qui manquait dans les options de document par défaut. L’ajout corrigé l’erreur 403.14 Forbidden.

Dans mon cas, le problème était dû à ActionFilterAtsortingbute personnalisé, qui était une sorte d’atsortingbut de filtre global. L’atsortingbut instancie un service via Autofac mais le service est tombé en panne dans le constructeur:

 public ActionFilterAtsortingbute() { _service = ContainerManager.Resolve(); } public class Service: IService { public Service() { throw new Exception('Oops!'); } } 

Dans mon cas, ni les fonctionnalités de Windows ni aspnet_regiis -i n’ont fait le travail. Après des heures de fouilles sur Internet, j’ai fait ma propre solution:

  1. Dans le Gestionnaire des services Internet (IIS) dans les modules, j’ai changé hérité en local dans le noeud UrlRoutingModule-4.0:

    entrer la description de l'image ici

  2. Dans web.config, j’ai collé quelques astuces de ce forum:

           

J’espère que cela aide