J'ai une API Web ASP.NET qui fonctionne correctement lors de l'exécution sur "IIS Express" avec localhost: 1783
Mais lorsque je décroise "Utiliser IIS Express" puis que je clique sur "Créer un répertoire virtuel" ...
... Je viens de recevoir 404 erreurs:
Des idées ce qui ne va pas? Merci!
Bien que la réponse indiquée le fasse fonctionner, tout ce que vous avez vraiment besoin d'ajouter à la configuration Web est:
<handlers>
<!-- Your other remove tags-->
<remove name="UrlRoutingModule-4.0"/>
<!-- Your other add tags-->
<add name="UrlRoutingModule-4.0" path="*" verb="*" type="System.Web.Routing.UrlRoutingModule" preCondition=""/>
</handlers>
Notez qu'aucun d'entre eux n'a un ordre particulier, bien que vous souhaitiez que vos suppressions soient supprimées avant vos ajouts.
La raison pour laquelle nous finissons par obtenir un 404 est que le module de routage d’URL n’intervient que pour la racine du site Web dans IIS. En ajoutant le module à la configuration de cette application, le module s'exécute sous le chemin de cette application (votre chemin de sous-répertoire), et le module de routage démarre.
Pour moi, en plus d'avoir runAllManagedModulesForAllRequests="true"
, j'ai également dû modifier l'attribut "path"
.__ ci-dessous. Auparavant, mon attribut path était "*."
, ce qui signifie qu'il n'était exécuté que sur les URL contenant un point Cependant, l'URL de mon application ne contient pas de point. Quand j'ai changé de chemin en "*"
, cela a fonctionné ... Voici ce que j'ai maintenant:
<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<modules runAllManagedModulesForAllRequests="true">
<remove name="WebDAVModule"/>
</modules>
<handlers>
<remove name="WebDAV" />
<remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
<remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
<remove name="ExtensionlessUrlHandler-Integrated-4.0" />
<add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
<add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*" verb="*" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*" verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>
</system.webServer>
Vous devrez peut-être installer le correctif KB980368 .
Cet article décrit une mise à jour qui permet à certains gestionnaires d'Internet Information Services (IIS) 7.0 ou IIS 7.5 de gérer les demandes dont les URL ne se terminent pas par un point. Plus précisément, ces gestionnaires sont mappés sur "". chemins de demande. Actuellement, un gestionnaire mappé sur un "." Le chemin de demande traite uniquement les demandes dont les URL se terminent par un point. Par exemple, le gestionnaire traite uniquement les demandes dont les URL ressemblent à l'URL suivante:
http://www.example.com/ExampleSite/ExampleFile .
Après avoir appliqué cette mise à jour, les gestionnaires mappés sur un "*". request path peut gérer les demandes dont les URL se terminent par un point et celles dont les URL ne se terminent pas par un point. Par exemple, le gestionnaire peut désormais gérer des demandes ressemblant aux URL suivantes:
http://www.example.com/ExampleSite/ExampleFile
http://www.example.com/ExampleSite/ExampleFile .
Une fois ce correctif appliqué, les applications ASP.NET 4 peuvent gérer les demandes d’URL sans extension. Par conséquent, les HttpModules gérés qui s'exécutent avant l'exécution du gestionnaire s'exécutent. Dans certains cas, les HttpModules peuvent renvoyer des erreurs pour des URL sans extension. Par exemple, un HttpModule qui a été écrit pour n'attendre que des demandes .aspx peut maintenant renvoyer des erreurs lorsqu'il tente d'accéder à la propriété HttpContext.Session.
Ce problème peut également se produire en raison des problèmes suivants:
1. Dans le Web.Config
<system.webServer>
<modules runAllManagedModulesForAllRequests="true" />
</system.webServer>
2.Assurez-vous que les éléments suivants sont disponibles dans le dossier bin du serveur sur lequel l'API Web est déployée.
• System.Net.Http
• System.Net.Http.Formatting
• System.Web.Http.WebHost
• System.Web.Http
Par défaut, ces assemblys ne sont pas copiés dans le dossier bin si la publication s'effectue via Visual Studio, car les packages de l'API Web sont installés via Nuget sur la machine de développement. Si vous voulez que ces fichiers soient disponibles dans le cadre de la publication de Visual Studio, vous devez définir CopyLocal sur True pour ces assemblys.
Certaines personnes disent que runAllManagedModulesForAllRequests = "true" aura des problèmes de performances et des problèmes de routage MVC . Ils suggèrent d'utiliser les éléments suivants:
http://www.britishdeveloper.co.uk/2010/06/dont-use-modules-runallmanagedmodulesfo.html
http://bartwullems.blogspot.com/2012/06/optimize-performance-of-your-web.html
Pour moi, ce problème était légèrement différent des autres réponses, car je ne recevais que des 404 sur OPTIONS, et pourtant j'avais déjà des options spécifiées dans mes options de gestionnaire d'URL intégré sans extension. Très perturbant.
En ajoutant le nœud security suivant au fichier web.config, il était nécessaire de supprimer ce problème - un fichier system.webserver complet inclus pour le contexte:
<system.webServer>
<modules runAllManagedModulesForAllRequests="true">
<remove name="WebDAVModule" />
</modules>
<handlers>
<remove name="ExtensionlessUrlHandler-Integrated-4.0" />
<remove name="OPTIONSVerbHandler" />
<remove name="TRACEVerbHandler" />
<remove name="WebDAV" />
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>
<security>
<requestFiltering>
<verbs>
<remove verb="OPTIONS" />
</verbs>
</requestFiltering>
</security>
</system.webServer>
Bien que ce ne soit pas la réponse parfaite à cette question, il s’agit du premier résultat de "IIS OPTIONS 404" sur Google. J'espère donc que cela aidera quelqu'un; m'a coûté une heure aujourd'hui.
En ce qui me concerne, j'ai reçu une erreur 404 sur mes sites Web N'UTILISANT PAS IIS Express (à l'aide de IIS local) lors de l'exécution d'une application WAS utilisant IIS Express. Si je fermais le navigateur utilisé pour exécuter IIS Express, le 404 disparaîtrait. Pour moi, mon projet IIS Express appelait des services locaux IIS. J'ai donc converti le projet IIS Express pour utiliser Local IIS, puis tout a fonctionné. Il semble que vous ne puissiez pas exécuter simultanément un site Web non-IIS Express et un site Web local IIS pour une raison quelconque.
Je lutte contre ce problème depuis quelques jours en essayant toutes sortes de choses suggérées. Ma machine dev fonctionnait bien, mais la nouvelle machine sur laquelle je déployais me donnait l'erreur 404.
Dans IIS manager, j'ai comparé les mappages de gestionnaires sur les deux machines afin de réaliser que de nombreux gestionnaires manquaient. Il s'avère que ASP.Net 5 n'était pas installé sur la machine.
Si vous utilisez Visual Studio 2012, téléchargez et installez la mise à jour 2 récemment publiée par Microsoft (à la date du 4/2013).
Mise à jour 2 de Visual Studio 2012
Cette mise à jour contient des corrections de bogues liées au problème.
J'ai eu le même problème. J'ai trouvé beaucoup de problèmes de R & D.
mais tant que votre configuration est finie, cela signifie que aspnet 64 bit et le IIS bien alors le seul problème que j’ai vu est le chemin "web api prenant le chemin local direct" de sorte que vous avez besoin de le regarder. par comme ceci .. ~ ../../../ api/products/
merci beaucoup d'avoir posté le problème. je leanred alot environ IIS et d'autres paramètres dans le fichier de configuration.