Page HTTP 404 non trouvée dans L'Api Web hébergée dans IIS 7.5

j'ai une application D'Api Web. Il fonctionne parfaitement bien lorsque je l'ai testé en utilisant le VS 2010 debugging dev server. Mais je l'ai maintenant déployé sur IIS 7.5 et je reçois une erreur HTTP 404 en essayant d'accéder à l'application.

voici ma toile.config

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <connectionStrings>
    <add name="DefaultConnection" connectionString="Data Source=.SQLEXPRESS;Initial Catalog=aspnet-FlowGearProxy-20123141219;Integrated Security=True" providerName="System.Data.SqlClient" />
  </connectionStrings>
  <appSettings>
    <add key="webpages:Version" value="2.0.0.0" />
    <add key="webpages:Enabled" value="true" />
    <add key="PreserveLoginUrl" value="true" />
    <add key="ClientValidationEnabled" value="true" />
    <add key="UnobtrusiveJavaScriptEnabled" value="true" />
  </appSettings>
  <system.web>
    <compilation debug="true" targetFramework="4.0" />
    <authentication mode="Forms">
      <forms loginUrl="~/Account/Login" timeout="2880" />
    </authentication>
    <pages>
      <namespaces>
        <add namespace="System.Web.Helpers" />
        <add namespace="System.Web.Mvc" />
        <add namespace="System.Web.Mvc.Ajax" />
        <add namespace="System.Web.Mvc.Html" />
        <add namespace="System.Web.Routing" />
        <add namespace="System.Web.WebPages" />
      </namespaces>
    </pages>
  </system.web>
  <system.webServer>
    <validation validateIntegratedModeConfiguration="false" />
    <modules runAllManagedModulesForAllRequests="true" />
  </system.webServer>
</configuration>
86
demandé sur Stephan Bauer 2012-03-14 17:37:32

26 réponses

je me débattais avec ça aussi. Heureusement, Steve Michelotti a documenté une solution qui a fonctionné pour moi ici .

à la fin de la journée, j'ai activé tous les verbes (verbe="*") au gestionnaire ExtensionlessUrlHandler-Integrated-4.0 dans ma configuration web.

<system.webServer>
    <validation validateIntegratedModeConfiguration="false" />
    <modules runAllManagedModulesForAllRequests="true" />
        <handlers>
            <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
            <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" resourceType="Unspecified" requireAccess="Script" preCondition="integratedMode,runtimeVersionv4.0" />
        </handlers>
</system.webServer>

D'autres ont souligné que le fait d'avoir activé WebDAV cause des problèmes. Heureusement, je n'ai pas ce problème.

81
répondu Kevin Ortman 2018-09-18 17:17:05

avait le même problème. Cette configuration a résolu le problème.

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

comme expliqué dans http://www.britishdeveloper.co.uk/2010/06/dont-use-modules-runallmanagedmodulesfo.html la solution ci-dessus doit être évitée. Utiliser ce lieu. La même solution est fournie par Lopsided aussi. Le garder ici pour permettre aux utilisateurs d'éviter la mise en œuvre de la première solution de travail.

<modules>
  <remove name="UrlRoutingModule-4.0" />
  <add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" preCondition="" />
  <!-- any other modules you want to run in MVC e.g. FormsAuthentication, Roles etc. -->
</modules>
49
répondu hemant gautam 2014-01-30 09:04:25

si IIS est installé ou activé après ASP.NET, vous devrez vous enregistrer manuellement ASP.NET avec IIS pour que votre application. Net fonctionne.

Pour Windows 7 et versions antérieures:

  1. Lancez L'invite de commande (cmd.exe) en tant qu'administrateur.
  2. naviguez jusqu'à L'emplacement approprié de .net Framework. (p. ex. C:\Windows\Microsoft.NET\Framework64\v4.0.30319)
  3. Run aspnet_regiis.exe -je

Pour Windows 8 et plus tard:

  1. à Partir du menu démarrer, tapez "fonctionnalités windows Activer ou désactiver" et sélectionnez le premier résultat.
  2. étendre les Services D'Information sur Internet: World Wide Web Services: fonctions de développement D'applications et sélectionner ASP.NET 4.5 (ou ASP.NET 3.5 si vous devez soutenir des projets sur .NET Framework 2.0-3.5).
  3. cliquez sur OK.
33
répondu Brandon Gano 2017-07-06 04:55:10

utilisez-vous L'application API Web dans un répertoire virtuel ou une application?

par exemple: j'ai eu le même problème lorsque j'ai déplacé mon projet dans mon IIS local sous le site Web par défaut > SampleWebAPI. Je crois que cela est dû au changement dans le routage URL comme suit:

Origine: localhost:3092/api/values

Déplacé: localhost/SampleWebAPI/api/values

si vous déplacez le projet D'API Web vers son propre site Web fonctionnant sur un port différent, il semble fonctionner.

note supplémentaire: j'avais encore compliqué la question en ajoutant api comme alias d'une application dans mon site web qui a causé le URL efficace pour être:

localhost:81/api/api/values - remarqué après avoir déplacé le site web à son propre site web

par conséquent, parce que je voulais maintenir une séparation entre mon site web et le site Web api mvc projet, je changé les règles de routage dans global.asax pour L'API Web "DefaultAPI" de api/{controller}/{id} à {controller}/{id} et le ASP.NET MVC one Default from {controller}/{id} to info/{controller}/{id} .

25
répondu Nicholas Barger 2013-05-31 21:22:26

C'est la seule solution qui a fonctionné pour moi...

j'ai eu un problème similaire... Peu importe ce que je faisais, rien n'était redirigé et mon fichier global était simplement ignoré. J'ai sérieusement envisagé de tout arrêter avant de trouver cette réponse. J'espère que ce lien aidera quelqu'un d'autre.


ajouter ce qui suit au web.fichier de configuration a fonctionné pour moi:

<system.webServer>
  <modules>
    <remove name="UrlRoutingModule-4.0" />
    <add name="UrlRoutingModule-4.0" type="System.Web.Routing.UrlRoutingModule" preCondition="" />
  </modules>
</system.webServer>

du système.webServer tag était déjà là, bien sûr, mais j'ai ajouté le modules tag et puis le supprimer & ajouter balises pour les modules de balise.

13
répondu Lopsided 2017-05-23 11:55:03

quelques éléments à vérifier:

  1. assurez-vous que le .net Framework 4 est installé.
  2. assurez-vous que la version 4 du .net Framework est sélectionnée pour votre site web et votre répertoire virtuel (le cas échéant).
  3. assurez-vous que vous avez MVC installé ou que vous avez les DLLs appropriées dans votre répertoire bin.
  4. pourrait devoir permettre ASP.NET 4.0 extensions de services web
  5. mettre le application dans son propre pool d'application.
  6. assurez-vous que le répertoire possède au moins les permissions d'exécution" Scripts Only".
11
répondu Joseph Schrag 2012-03-14 14:29:31

j'ai eu un problème similaire. J'avais les bons réglages sur mon web.fichier de configuration mais exécutait le pool d'applications en Mode Classique plutôt que mode intégré

screen shot

9
répondu Rob Sedgwick 2017-10-09 16:54:57

Ce problème peut également se produire en raison de ce qui suit

1.Sur 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 où l'API Web est déployée

  • System.Net."

  • System.Net.Http.Formatage

  • du Système.Web.Http.Hébergeur

  • du Système.Web.Http

ces assemblages ne seront pas copiés dans le dossier bin par défaut si la publication se fait via Visual Studio car les paquets de L'API Web sont installés via Nuget dans la machine de développement. Néanmoins, si vous voulez réaliser ces fichiers pour être disponibles dans le cadre de Visual Studio publish, vous devez définir CopyLocal à True pour ces assemblages

Sadish Kumar.V

5
répondu Sadish Kumar V 2014-11-17 11:31:50

j'ai aussi rencontré ce problème. J'ai résolu le problème en allant dans les Pools D'Application > Nom du Pool D'Application et j'ai changé le Framework .NET de la version v. 2.0.50727 à v4.0.30319.

5
répondu coson 2016-01-22 22:27:59

Il ya correctif officiel de microsoft: http://support.microsoft.com/kb/980368

je recommande fortement de ne pas utiliser < modules runallmanagedmodulesfor allrequests="true">. Cela conduit toutes les demandes (même .jpg,.CSS. ,pdf, etc) seront traités par tous les modules HTTP enregistrés. Il y a deux moments négatifs: a) charge supplémentaire sur les ressources matérielles; b) erreurs potentielles, car les modules http traiteront un nouveau type de contenu.

3
répondu Roman O 2016-02-29 01:40:34

j'ai commencé à recevoir 404 réponses de L'API Web après avoir suivi un tutoriel Windows Azure qui m'a dit d'ajouter un fichier" WebRole.cs " à mon projet.

après suppression de" WebRole.cs " de mon projet, mes appels D'API Web ont recommencé à fonctionner.

2
répondu Josh Mouch 2012-09-14 17:47:53

j'ai dû désactiver L'Option" Publier le fichier précompilé pendant la publication."

2
répondu Pakman 2015-02-13 23:13:52

s'il Vous Plaît assurez-vous que le pool d'application est en mode intégré

Et ajoutez la ligne suivante dans le site web.fichier de configuration:

<system.webServer>
    .....
    <modules runAllManagedModulesForAllRequests="true" />
    .....
</system.webServer>
2
répondu Rakesh 2015-09-03 06:52:57

Dans mon cas, le problème était simplement que j'ai essayé d'accéder au site à

myserver.myintranet.com/mysite

mais la reliure du site web pour http dans IIS n'avait pas le nom d'hôte spécifié dans la reliure. Il avait travaillé avant et je n'ai aucune idée de comment j'ai soufflé.

une fois que j'ai mis myserver.myintranet.com dans le nom d'hôte, le 404 avait disparu.

dans IIS Manager, vous allez dans fixations... in le volet actions, puis éditer la liaison http pour spécifier le nom de l'hôte.

2
répondu toddmo 2015-10-28 22:20:38

basé sur ce donc réponse , j'ai juste dû changer path="*." en path="*" pour le Ajouté ExtensionlessUrlHandler-Integrated-4.0 dans configuration>system.WebServer>handlers dans mon web.config

avant:

<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />

après:

<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*" verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
2
répondu Greg 2017-05-23 12:26:22

avait le même problème, une réponse 404 pour les contrôleurs d'api web lorsqu'il était servi à partir de L'IIS, mais tout fonctionnait bien à partir de VS2010. Aucune des deux solutions n'a fonctionné pour moi. Finalement, j'ai découvert que le problème était que nous avons ajouté le support WSE 3.0 pour L'application et Microsoft.Web.La dll de Services3 était manquante dans le répertoire /bin de l'application. Bizarre, mais après avoir copié la dll, le tracé a commencé à fonctionner.

1
répondu devilcius 2013-02-25 14:00:17

N'oubliez pas de déployer mondiale.asax 151910920"

1
répondu Adem Aygun 2016-03-28 14:18:46

quel type de requête HTTP faites-vous?

il s'agit d'une réponse légèrement à gauche, mais avez-vous essayé de supprimer la page d'erreur IIS default pour 404 pour vérifier ce que votre API retourne réellement?

j'ai eu un problème lorsque j'ai demandé à un contrôleur de retourner un 404 alors que j'y affichais le mauvais numéro d'identification. J'ai découvert que j'obtenais toujours la page "fichier ou répertoire introuvable" de IIS 404 plutôt que la réponse HTTP de mon API. Retrait de la la page d'erreur par défaut 404 a résolu le problème.

problème Différent, mais on ne sait jamais ça peut aider ;)

0
répondu Oliver Picton 2012-03-26 15:36:56

ce morceau de configuration dans web.fichier de configuration peuvent aider comme l'a aidé à m': dans le système.le serveur web de la section:

      <security>
          <requestFiltering>
              <verbs applyToWebDAV="true">
                  <remove verb="PUT" />
                  <add verb="PUT" allowed="true" />
                  <remove verb="DELETE" />
                  <add verb="DELETE" allowed="true" />
                  <remove verb="PATCH" />
                  <add verb="PATCH" allowed="true" />
              </verbs>
          </requestFiltering>
      </security>      
0
répondu Konstantin Isaev 2013-05-29 00:10:57

j'ai récemment eu une erreur 404 not found avec toutes les routes/controllers de mon Api Web 2. Je suis donc allé sur le serveur actuel et j'ai essayé de naviguer en utilisant localhost au lieu du nom d'hôte et j'ai eu "404.7 Not Found - le module de filtrage des requêtes est configuré pour refuser l'extension du fichier".

Ce DONC, après m'aider à le résoudre.

0
répondu santos 2017-05-23 12:18:20

il a été résolu pour moi, quand j'ai activé la case à cocher pour UrlRoutingModule-4.0:

Gestionnaire des services IIS > Modules > sélectionnez UrlRoutingModule-4.0 > Module d'Édition > cochez la case "N'invoquer que pour les requêtes ASP.NET applications or managed handlers".

0
répondu Anilkumar Y 2014-12-22 14:07:54

j'avais le même problème: sur une machine nouvellement installée avec Visual Studio 2013, le projet d'api web fonctionnait sous IISExpress, mais pas sous IIS local. J'ai essayé tout ce que j'ai pu trouver, mais à la fin le problème n'était pas nécessaire avec L'API Web, mais avec MVC: même il a été installé, Aucun projet MVC était en cours d'exécution.

ce qui a fonctionné pour moi a été de désinstaller IIS (à partir D'Ajouter/Supprimer les fonctionnalités de Windows), puis de le réinstaller, puis d'exécuter aspnet_regiis-I. Peut-être que ça aide. quelqu'un d'autre.

0
répondu Marian Siminescu 2015-02-16 09:02:26

j'ai passé beaucoup de temps à essayer beaucoup de choses pour finalement réaliser que j'ajoutais mon application web pas dans les Sites/sites Web par défaut, mais dans un autre site Web lié à un autre port. Évidemment, essayer localhost sur le port 80 donnerait un 404.

0
répondu guiomie 2015-03-25 20:44:24

je ne fais rien, il suffit d'ajouter cette balise dans le web.config, son fonctionnement cette question de venir jusqu'à l'un des points ci-après

  1. utiliser L'Api Web dans le même projet en utilisant MVC ou asp.net formulaires

  2. utilisez RouteConfig et WebApiConfig dans Global.asax comme GlobalConfiguration.Configurer (WebApiConfig.Inscrire); RouteConfig.RegisterRoutes(RouteTable.Routes);

  3. utiliser RouteConfig à 2 fins, asp.net formulaires utilisant l'acheminement avec friendlyurl et mvc pour l'acheminement MVC

nous utilisons simplement cette balise dans web.config, ça va fonctionner.

<system.webServer>
<modules runAllManagedModulesForAllRequests="true">
   .........................
</modules>
</system.webServer>
0
répondu adnan 2015-10-19 07:18:31

a rencontré le même problème avec les API Web et .Net Core Web API. Il a bien fonctionné dans VS 2017 pendant le débogage, mais a retourné 404 lorsqu'il a été publié à l'IIS 7.5. La Solution pour moi était de changer la façon dont j'ai créé le site. Au lieu de publier à la racine d'un Site Web (créé par le clic droit des Sites...Ajouter un Site web), j'ai dû créer une Application (créée en cliquant droit sur un Site web...Add Application) et publier dans ce dossier. Notez que pour la version de base, j'ai dû changer l'Application Mise à jour de la version du Framework Pool .NET vers "No Managed Code".

0
répondu miked 2018-02-09 22:19:48

j'ai lutté avec cela, aussi. Mon problème exact était que j'avais un Service Web ASMX qui, quand j'ai entré un paramètre dans une méthode web et l'ai testé, alors il me donnait le 404. La méthode a bien fonctionné dans le passé et n'avait pas été changé, seulement re-publié. Puis je suis arrivé et j'ai essayé toutes les réponses postées et rien n'a aidé.

ma solution ultime? Je sais que c'est radical, mais je viens de créer une nouvelle solution de studio visuel et un projet web. MVC sélectionné, puis j'ai fait un "Add" > "New Item", sélectionné "Visual C#" > "Web" et "service Web (ASMX)" sous cela. J'ai copié tous mes vieux code-behind de code, puis j'ai pris note de l'espace de noms, il a donné le nouveau fichier dans mon nouveau projet, puis collé tous mes vieux code dans le nouveau fichier code-behind dans le nouveau projet et de mettre l'espace de noms à ce qu'il avait été. Puis j'ai créé mes dossiers dans mon projet que J'avais avant D'utiliser Visual Studio pour faire "Ajouter" > "nouveau dossier", puis recopié dans Mes dossiers dans les dossiers de mon autre projet en utilisant Windows Explorer, puis à droite-cliqué chaque dossier dans Visual Studio et a fait "Ajouter" > "élément existant..."et a tiré les articles dans ces dossiers dans les dossiers Visual Studio de mon nouveau projet. J'ai de nouveau référencé toutes mes assemblées .NET, ayant les deux projets ouverts pour que je puisse comparer ceux auxquels j'avais référencé, précédemment (j'avais une tonne!). J'ai dû nommer mon nouveau projet légèrement différent - fondamentalement, j'ai fait quelque chose comparable à "GeneralWebApp" au lieu de "MyWebApp", par exemple - donc j'ai dû faire un" Replace All " dans toute ma solution pour remplacer ce nom, de sorte qu'il obtiendrait le bon namespace pour tous mes fichiers. Puis j'ai fait un" reconstruire tout "sur le projet, puis je l'ai démarré avec le bouton" Play " Visual Studio donne quand je l'ai obtenu pour construire correctement. Il a bien fonctionné. Donc je l'ai publié, et tout allait bien sur le serveur où je l'ai publié, quand je l'ai lancé de là. Je n'ai aucune explication sur ce qui s'est passé, mais c'est comme ça que j'ai survécu. Ce n'est pas un mauvais test juste pour voir si quelque chose que Visual Studio est en train de faire a tout gâché.

0
répondu vapcguy 2018-03-12 22:42:00