102 votes

HTTP 404 Page Not Found dans l'Api Web hébergée dans IIS 7.5

J'ai une application Web Api. Elle fonctionne parfaitement bien lorsque je l'ai testée en utilisant le serveur de développement de débogage de VS 2010. Mais je l'ai maintenant déployée sur IIS 7.5 et j'obtiens une erreur HTTP 404 lorsque j'essaie d'accéder à l'application.

Voici mon web.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>

2 votes

J'ai le même problème. Je n'ai pas encore trouvé de solution, mais j'ai découvert que si l'on sélectionne le site dans IIS, puis que l'on va dans la fonction Handler Mappings, il y a un mapping pour les fichiers statiques qui fait correspondre * à un fichier qui doit exister. Lorsque je supprime cette correspondance et que j'en ajoute une nouvelle pour tous les verbes HTTP, je n'obtiens plus le message 404, qui est remplacé par une page blanche.

0 votes

>>utilisation du serveur de débogage VS 2010. -- AKA le méchant Cassini. Voir blogs.msdn.com/b/rickandy/archive/2011/04/22/ -- Si cela ne fonctionne pas, créez une nouvelle application MVC 4 WebApi et testez le déploiement - simple

96voto

Kevin Ortman Points 866

J'ai également été confronté à cette question. Heureusement, Steve Michelotti a documenté une solution qui a fonctionné pour moi aquí .

En fin de journée, j'ai activé tous les verbes (verb="*") vers le 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 signalé que l'activation de WebDAV posait des problèmes. Heureusement, je n'ai pas rencontré ce problème.

4 votes

+1 pour celui-là. Mais je l'ai changé dans le Handler Mappings sur l'application à partir de IIS Manager. Il était activé pour un certain nombre de verbes. Je l'ai changé pour tous les verbes (*) et voilà. Mais il est toujours préférable d'indiquer la source.

1 votes

J'ai le même problème, mais ces changements ne m'ont pas aidé. Existe-t-il une autre configuration ? Ou peut-être une référence de bibliothèque ? Veuillez également consulter la page suivante : stackoverflow.com/questions/27303523/

2 votes

De nombreuses personnes affirment que l'utilisation de runAllManagedModulesForAllRequests aura un impact sur les performances (voir les réponses de Hemant Gautam ci-dessous). Cependant, je n'arrive pas à faire fonctionner le même service, alors je suis la configuration ici : blog.maartenballiauw.be/post/2012/12/07/ Ce lien indique également que l'activation de WebDAV peut également affecter le résultat

56voto

hemant gautam Points 251

J'ai eu le même problème. Ce paramètre de configuration a résolu le problème.

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

Comme expliqué dans l'affaire http://www.britishdeveloper.co.uk/2010/06/dont-use-modules-runallmanagedmodulesfo.html La solution ci-dessus doit être évitée. Utilisez plutôt celle-ci. La même solution est fournie par Lopsided également. Je la garde ici pour permettre aux utilisateurs d'éviter de mettre en œuvre la première solution qui fonctionne.

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

0 votes

Cela fonctionne bien, mais ce n'est pas une très bonne solution. Il est préférable d'utiliser UrlRoutingModule (voir la réponse de Lopsided ci-dessous). britishdeveloper.co.uk/2010/06/

38voto

Brandon Gano Points 1717

Si IIS est installé ou activé après ASP.NET, vous devrez enregistrer manuellement ASP.NET auprès d'IIS pour que votre application .NET fonctionne.

Pour Windows 7 et les versions antérieures :

  1. Exécutez l'Invite de commande (cmd.exe) en tant qu'administrateur.
  2. Naviguez jusqu'à l'emplacement approprié du .NET Framework. (par exemple C:\Windows\Microsoft.NET\Framework64\v4.0.30319 )
  3. Exécuter aspnet_regiis.exe -i

Pour Windows 8 et les versions ultérieures :

  1. Dans le menu Démarrer, tapez "Activer ou désactiver les fonctionnalités de Windows" et sélectionnez le premier résultat.
  2. Développer les services d'information Internet : Services du World Wide Web : Caractéristiques du développement d'applications et sélectionnez ASP.NET 4.5 (ou ASP.NET 3.5 si vous devez prendre en charge des projets sur .NET Framework 2.0-3.5).
  3. Cliquez sur OK.

2 votes

J'ai migré d'IIS Express pour le développement vers IIS complet et c'est ce qui a résolu le problème pour moi. Je vous remercie de votre attention.

1 votes

Similaire à @JimBrown ci-dessus ; cela a fonctionné pour moi après avoir migré d'IIS express.

0 votes

Cela m'a permis de résoudre le problème. Sur Windows 7, Visual Studio 2015 Ent, nouveau site web MVC 5, passage de IIS Express à IIS complet.

28voto

Nicholas Barger Points 143

Exécutez-vous l'application API Web dans un répertoire virtuel ou dans une application ?

Par exemple : J'ai eu le même problème lorsque j'ai déplacé mon projet vers mon IIS local sous Default Web Site > SampleWebAPI. Je pense que cela est dû à la modification de l'élément URL comme suit :

Original : localhost:3092/api/values
Proposé : localhost/SampleWebAPI/api/values

Si vous déplacez le projet Web API sur son propre site web fonctionnant sur un port différent, cela semble fonctionner.

Note complémentaire : j'avais encore compliqué la question en ajoutant api en tant qu'alias d'une application de mon site web, ce qui a provoqué l'apparition d'un problème d'efficacité de l'application. URL d'être :

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

Par conséquent, comme je voulais maintenir une séparation entre mon site web et le site du projet web api mvc, j'ai modifié les règles de routage dans global.asax pour l'API Web "DefaultAPI" de api/{controller}/{id} a {controller}/{id} et celui de ASP.NET MVC Default de {controller}/{id} a info/{controller}/{id} .

3 votes

Hehehe... J'avais nommé mon application en IIS como api aussi. Cela a provoqué tous ces essais et erreurs de débogage pendant plus de 2 heures. Merci beaucoup d'avoir partagé votre expérience ! Je l'ai renommé et je suis de nouveau opérationnel :D

0 votes

Merci - c'était mon problème ! :)

0 votes

Je ne sais pas trop pourquoi les appels à l'api échouaient alors que j'avais hébergé mon projet sur un port 8080, le fait de le déplacer dans un répertoire virtuel sous le site web par défaut a suffi :)

11voto

Joseph Schrag Points 307

Quelques points à 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 MVC est installé ou que les DLL appropriées se trouvent dans votre répertoire bin.
  4. Il pourrait être nécessaire d'autoriser les extensions de services web ASP.NET 4.0
  5. Placer l'application dans son propre pool d'applications.
  6. Assurez-vous que le répertoire a au moins les permissions d'exécution "scripts Only".

0 votes

J'ai 4 autres applications web normales qui tournent sur le même serveur IIS et qui utilisent toutes .net framework 4. Alors lesquels de ces 4 points ne sont pas nécessaires ? Quand j'ai publié mon application mvc, j'ai ajouté l'ajout de dépendances déployables et j'ai ajouté ASP.NET MVC pour qu'il soit dans mon répertoire bin.

0 votes

@Armand On dirait que vous avez fait le numéro 1. #Le point 2 est encore nécessaire. L'ajout de dépendances déployables, si vous l'avez fait comme décrit ici : haacked.com/archive/2011/05/25/bin-deploying-asp-net-mvc-3.aspx devrait prendre en charge le point 3 ci-dessus. #Le point 4 peut être nécessaire ou non, mais je n'ai pas les connaissances nécessaires pour vous dire quand il est nécessaire ou non.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X