94 votes

Page HTTP 404 introuvable dans Web Api hébergée dans IIS 7.5

J'ai une application Web Api. Cela fonctionne parfaitement lorsque je l’ai testé avec le serveur de débogage VS 2010. Mais je l'ai maintenant déployé 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>
 

92voto

Kevin Ortman Points 866

J'ai eu du mal avec cela. Heureusement, Steve Michelotti documenté une solution qui a fonctionné pour moi ici.

À la fin de la journée, j'ai activé tous les verbes (verb="*") à la ExtensionlessUrlHandler-Intégré-4.0 gestionnaire 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 WebDAV provoque des problèmes. Heureusement, je n'ai pas ce problème.

55voto

hemant gautam Points 251

A la même question. Ce paramètre de configuration 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 solution ci-dessus doivent être évités. Utiliser ce lieu. Même solution est fournie par de travers 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>

37voto

Brandon Gano Points 1717

Notez que si vous installez ASP.NET MVC 4 avant d'installer les IIS7, vous devrez peut-être enregistrer manuellement .NET Framework 4 avec IIS pour qu'une application d'API Web pour fonctionner correctement.

  1. Exécutez l'Invite de Commande (cmd.exe) en tant qu'administrateur.
  2. Naviguer le cas échéant .NET Framework emplacement. (par ex. C:\Windows\Microsoft.NET\Framework64\v4.0.30319)
  3. Exécuter aspnet_regiis.exe -je

J'ai suivi de nombreux autres suggestions ici avant de finalement, cela a résolu le problème.

26voto

Nicholas Barger Points 143

Êtes-vous de l'exécution de l'API Web app dans un répertoire virtuel ou d'une application?

Par exemple: j'ai eu le même problème quand j'ai déménagé de mon projet à mon local IIS sous le Site Web par Défaut > SampleWebAPI. Je crois que c'est dû à la variation de l' URL de routage comme suit:

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

Si vous déplacez le projet d'API Web de son propre site web en cours d'exécution sur un port différent, cela semble fonctionner.

Autre remarque: j'avais encore compliqué le problème en ajoutant api que les alias d'une application à l'intérieur de mon site qui a causé le efficace, URL être:

localhost:81/api/api/values - remarqué cela après le déplacement le site web de son propre site web

Donc, parce que je voulais maintenir une séparation entre mon site et de l'api du web mvc site du projet, j'ai changé les règles de routage en global.asax pour l'API Web "DefaultAPI" de l' api/{controller}/{id} de {controller}/{id} et le ASP.NET MVC un Default de {controller}/{id} de info/{controller}/{id}.

11voto

Joseph Schrag Points 307

Quelques points à vérifier:

  1. Assurez-vous que vous avez la .NET Framework 4 installé.
  2. S'assurer que la version 4 de la .NET Framework est choisi pour votre site web et sur le répertoire virtuel (le cas échéant).
  3. S'assurer que vous avez MVC installé ou avoir les Dll dans votre répertoire bin.
  4. Pourriez avoir besoin pour permettre ASP.NET 4.0 extensions du service web
  5. Mettre l'application dans son propre pool d'application.
  6. Assurez-vous que le répertoire a au moins "Scripts que" les autorisations d'exécution.

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