Erreur HTTP MVC4 403.14 - Interdit

88

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

Des idées?

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

mithun_daa
la source
J'ai rencontré ce même problème lorsque j'ai créé une nouvelle application Web Forms asp.net 4.5 . Cela fonctionnait bien localement (IIS 7.5), mais une fois déployé sur le serveur de test (également IIS 7.5), la plupart de mes fichiers javascript et css regroupés et minifiés ne se chargeaient pas avec 404 Not Found. La réponse ci-dessous à propos de runAllManagedModulesForAllRequests a résolu le problème pour moi!
ClearCloud8
J'ai peut-être répondu à cette question à: stackoverflow.com/questions/24343788/…
fsbf
<system.webServer> <modules runAllManagedModulesForAllRequests = "true" /> </system.webServer>
Jinto John

Réponses:

172

Essayer

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

Via

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

MarkKGreenway
la source
1
Si cela était en place, tout a fait, et seuls les sites MVC 4 fonctionnent. Il doit y avoir une autre astuce qui doit être en place pour que cela fonctionne.
Maxim V. Pavlov
1
Ce. J'ai essayé toutes les autres solutions de base sans joie, mais c'est celle qui a réglé le problème.
Julia Hayward
1
Cher ami, je le fais, mais ça ne marche pas. Vraiment, je travaillais avec MVC 4 et VisualStudio 2012, mon projet fonctionne bien jusqu'à hier, mais après quelques changements habituels dans mes codes, cette erreur monte en page par défaut (home / index).
Quelqu'un
4
Ce correctif n'est pas approprié pour ce problème (voir le lien dans la réponse de Jason Koopmans). il est préférable de télécharger le correctif associé ici microsoft.com/en-us/download/…
Ahmad Ibrahim
@AhmadIbrahim c'est en fait une solution au problème. Le correctif est pour 64 bits uniquement, la question indique clairement 32 bits. Il existe certaines configurations pour lesquelles RAMMFAR est la solution de travail la plus fiable et ajoute une charge de serveur minimale si les CDN sont utilisés de manière appropriée.
MarkKGreenway
22

L'erreur 403.14 est le code d'erreur HTTP pour ne pas être autorisé à répertorier le contenu d'un répertoire. Veuillez vous assurer que

  1. Vous avez configuré le site Web en tant qu'application dans IIS
  2. Vous avez .NET 4.5 installé sur le serveur
  3. Vous avez configuré le pool d'applications pour exécuter la version appropriée du framework .NET (c'est-à-dire qu'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. Veuillez consulter cet article pour un problème / résolution similaire

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

Tommy
la source
1. Je n'ai pas configuré le site Web en tant qu'application. 2. J'ai installé .net 4.5, 3. mon pool d'applications ciblait le bon framework. 4. Ma piscine était configurée pour utiliser classique, je l'ai changée en intégrée mais n'a pas aidé. 5. Je suis presque sûr que 4.5 est enregistré.
mithun_daa
1
@mithun_daa - Si vous n'avez pas configuré votre site Web en tant qu'application, c'est assez facile -> cliquez avec le bouton droit sur le répertoire virtuel / site Web et Convertissez en application (ou ajoutez une application, la terminologie m'échappe pour le moment)
Tommy
Est-ce une chose spécifique à MVC4? Parce que je n'ai jamais configuré mes projets MVC3 en tant qu'applications et ils fonctionnent très bien.
mithun_daa
Cela peut être la façon dont vous déployez alors -> mais toute application Web .NET doit être définie en tant qu'application dans IIS. Cependant, si vous les placez simplement sous le site Web par défaut, il s'exécute sous l'application de site Web par défaut. Assurez-vous que le pool d'applications du site Web par défaut est correctement configuré (.NET 4 / intégré). Lorsque vous créez un répertoire virtuel / site Web virtuel dans IIS, vous avez également la possibilité de le définir sur sa propre application.
Tommy du
Je vous ai probablement confondu, mais aucun des sites n'est sous le site Web par défaut. Je clique droit sur «Sites» dans IIS7 et je choisis «Ajouter un site Web». C'est comme ça que je fais.
mithun_daa
11

Peut-être ... Si vous utilisez l'assistant de publication (comme je l'ai fait) et cochez la case "Précompiler pendant la publication" (comme je l'ai fait) et voyez les mêmes symptômes ...

Oui, je me suis battu à 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.

Espérons que cela corrige certains.

Brian Kirkpatrick
la source
Si vous rencontrez ce problème, une cause possible est la présence d'une version différente d'une bibliothèque externe dans l'environnement de production. J'ai fait compiler mon application mvc avec une version plus récente d'une dll tierce et une version plus ancienne sur le serveur de production ..
ValGe
Voici la merveille de garçon, l'enfant, l'homme miracle, le phénomène, l'imparable, le roi, voici @Brian Kirkpatrick mesdames et messieurs
Luis Villarroel
10

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

Assurez-vous de cocher les options requises dans

entrez la description de l'image ici

Kurkula
la source
6

Avant de postuler

runAllManagedModulesForAllRequests="true"/>

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

  <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

Jason Koopmans
la source
C'est la vraie réponse. Merci!
Spivonious
5

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 nouvelle configuration 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é en

routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{renamed_text}",
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
utilisateur641770
la source
Pour moi, j'ai découvert il y a longtemps que je peux saisir nullle nameparamètre pour éviter de créer un nom pour chaque route. Il s'avère que cela provoque parfois un 403 (uniquement sur notre environnement de production, Win Server 2008 R2 exécutant .NET 4.5.1, MVC 5 dans un projet VS2013. Pour résoudre, j'ai ajouté un nom pour chaque route.
tristankoffee
2

Vous pouvez également obtenir un 403 si, lors du test avec le serveur de développement, vous utilisez un pipeline intégré, puis installez en mode pipeline classique sur votre serveur Web IIS 7.5 en direct, il me manquait également mon dossier app_data qui était également requis

marcusdev
la source
2

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
Pourquoi publier la même réponse à plusieurs endroits?
devnull
8
Parce que j'essayais de trouver la solution, et cela concerne les deux. Sauvez quelqu'un de le chasser.
Mastro
Vous ne devriez pas publier de réponses en double. C'est tout ce que je peux dire.
devnull
1
<system.webServer>
   <modules runAllManagedModulesForAllRequests="true"/> 
 </system.webServer>

Vous pouvez utiliser le code ci-dessus

Jinto John
la source
1

J'avais défini le pool d'applications de la nouvelle application DefaultAppPoolsur IIS, qui utilise évidemment le Classicpipeline avec .NET v.2.0.

Pour résoudre le problème, j'ai créé un nouveau pool d'applications en utilisant le Integratedpipeline et .NET v4.0. juste pour cette nouvelle application, puis tout a commencé à fonctionner comme prévu.

N'oubliez pas d'attribuer 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.

Leniel Maccaferri
la source
0

celui que je vois le plus fréquemment récemment est IIS et permet aux applications 32 bits de s'exécuter

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

MarkKGreenway
la source
Je suis désolé mais je n'ai pas suivi ce que vous vouliez dire. Ceci est un serveur 32 bits. J'ai mis à jour mon message pour ajouter plus d'informations.
mithun_daa
Ahhh ... Sont-ils dans des app_pools séparés?
MarkKGreenway
Oui, chacun de mes sites a ses propres pools d'applications.
mithun_daa du
0

J'ai un problème un peu différent, sur le serveur 2012, j'ai oublié d'activer asp.net 4.5, donc si vous rencontrez ce problème, vérifiez que vous l'activez.

Volodymyr Bilyachat
la source
0

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 en utilisant Ajouter des rôles et des fonctionnalités: choisi l'installation basée sur les rôles ou les fonctionnalités, choisi mon serveur, puis pour Sélectionner le rôle du serveur, sélectionnez Serveur Web (IIS) / Serveur Web / Développement d'applications, puis cliquez sur ASP.NET 4.5, confirmez l'installation d'un prérequis, puis réinstallez ASP.NET 4.5.

Mes recherches précédentes m'avaient conduit à croire 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 qui ne semble plus disponible.

fsbf
la source
0

Je résous le problème en ouvrant le studio visuel, en développant les références et en changeant la propriété "Copy Local" en "True".

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

Wagner
la source
0

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

Erik K.
la source
0

Dans mon cas, le problème a été causé par ActionFilterAttribute personnalisé qui était une sorte d'attribut de filtre global. L'attribut a instancié un service via Autofac mais le service s'est écrasé dans le constructeur:

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

public class Service: IService
{ 
    public Service()
    {
        throw new Exception('Oops!');
    }
}
Artem Vertiy
la source
0

Dans mon cas, ni les fonctionnalités Windows ni aspnet_regiis -in'ont fait le travail. Après des heures de fouille sur Internet, j'ai créé ma propre solution:

  1. Dans le gestionnaire IIS dans les modules, j'ai changé l'héritage en local dans le nœud UrlRoutingModule-4.0:

    entrez la description de l'image ici

  2. Dans web.config, j'ai collé un mélange de quelques conseils de ce 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>

J'espère que ça aide

Sylwia M
la source