HTTP 404-Seite in Web-API in IIS 7.5 nicht gefunden

96

Ich habe eine Web-API-Anwendung. Es funktioniert einwandfrei, als ich es mit dem VS 2010 Debugging Dev Server getestet habe. Aber ich habe es jetzt in IIS 7.5 bereitgestellt und erhalte einen HTTP 404-Fehler, wenn ich versuche, auf die Anwendung zuzugreifen.

Hier ist meine 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>
Armand
quelle
2
Ich habe das gleiche Problem. Ich habe noch keine Lösung gefunden. Ich habe jedoch festgestellt, dass bei Auswahl der Site in IIS und bei Verwendung der Funktion "Handlerzuordnungen" eine Zuordnung für statische Dateien vorhanden ist, die * einer vorhandenen Datei zugeordnet werden. Wenn ich diese Zuordnung entferne und eine neue Zuordnung für alle HTTP-Verben hinzufüge, erhalte ich die 404 nicht mehr, sie wird durch eine leere weiße Seite ersetzt.
Despertar
>> Verwenden des VS 2010-Debugging-Entwicklungsservers. - AKA die böse Cassini. Siehe blogs.msdn.com/b/rickandy/archive/2011/04/22/… - Wenn dies nicht funktioniert, erstellen Sie eine neue MVC 4 WebApi-App und testen Sie die Bereitstellung - einfach
RickAndMSFT

Antworten:

93

Ich hatte auch damit zu kämpfen. Glücklicherweise dokumentiert Steve Michelotti eine Lösung , die für mich gearbeitet hier .

Am Ende des Tages habe ich alle Verben (verb = "*") für den ExtensionlessUrlHandler-Integrated-4.0-Handler in meiner Webkonfiguration aktiviert.

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

Andere haben darauf hingewiesen, dass die Aktivierung von WebDAV Probleme verursacht. Glücklicherweise bin ich auch nicht auf dieses Problem gestoßen.

Kevin Ortman
quelle
3
+1 für diesen. Aber ich habe es in den Handler-Zuordnungen in der Anwendung von mit IIS Manager geändert. Es wurde für eine Reihe von Verben aktiviert. Ich habe das in alle Verben (*) und voila geändert. Aber immer besser in die Quelle zu setzen.
Wolf5
1
Ich habe das gleiche Problem, aber diese Änderungen haben mir nicht geholfen. Gibt es auch eine andere Konfiguration? Oder kann eine Bibliotheksreferenz sein? Bitte beachten Sie auch: stackoverflow.com/questions/27303523/…
Babak
2
Viele Leute sagen, dass die Verwendung von runAllManagedModulesForAllRequests die Leistung beeinflusst (siehe Antworten von Hemant Gautam unten). Da ich jedoch nicht den gleichen Service erhalten kann, folge ich der Konfiguration hier: blog.maartenballiauw.be/post/2012/12/07/… Dieser Link weist auch darauf hin, dass das Aktivieren von WebDAV auch das Ergebnis beeinflussen kann
Hoàng Long
Super Antwort!
EnocNRoll - AnandaGopal Pardue
1
Für mich war das Verb schon *. Ich musste auch den Pfad ändern *, damit es funktioniert, da *.das Problem immer noch verursacht wurde
Alsty,
56

Hatte das gleiche Problem. Diese Konfigurationseinstellung hat das Problem behoben.

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

Wie unter http://www.britishdeveloper.co.uk/2010/06/dont-use-modules-runallmanagedmodulesfo.html erläutert, sollte die obige Lösung vermieden werden. Verwenden Sie dies stattdessen. Die gleiche Lösung bietet auch Lopsided. Lassen Sie es hier, damit Benutzer die Implementierung der ersten funktionierenden Lösung vermeiden können.

<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>
Hemant Gautam
quelle
Funktioniert gut, ist aber keine sehr gute Lösung. Es ist besser, UrlRoutingModule zu verwenden (siehe Antwort von Lopsided unten). britishdeveloper.co.uk/2010/06/…
Der_Meister
37

Wenn IIS nach ASP.NET installiert oder aktiviert ist, müssen Sie ASP.NET manuell bei IIS registrieren, damit Ihre .NET-Anwendung funktioniert.

Für Windows 7 und früher:

  1. Führen Sie die Eingabeaufforderung (cmd.exe) als Administrator aus.
  2. Navigieren Sie zum entsprechenden .NET Framework-Speicherort. (z. B. C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319)
  3. Führen Sie aspnet_regiis.exe -i aus

Für Windows 8 und höher:

  1. Geben Sie im Startmenü "Windows-Funktionen ein- oder ausschalten" ein und wählen Sie das erste Ergebnis aus.
  2. Erweitern Sie Internetinformationsdienste: World Wide Web Services: Anwendungsentwicklungsfunktionen und wählen Sie ASP.NET 4.5 (oder ASP.NET 3.5, wenn Sie Projekte unter .NET Framework 2.0-3.5 unterstützen müssen).
  3. OK klicken.
Brandon Gano
quelle
2
Ich bin von IIS Express für die Entwicklung auf vollständiges IIS umgestiegen, und das hat es für mich behoben. Vielen Dank!
Jim Brown
1
Ähnlich wie bei @JimBrown oben; Nach der Migration von IIS Express hat es bei mir funktioniert.
SolidRegardless
Das hat es für mich gelöst. Unter Windows 7 wurde Visual Studio 2015 Ent, die neue MVC 5-Website, von IIS Express auf vollständiges IIS geändert.
Geoff Gunter
26

Führen Sie die Web-API-App in einem virtuellen Verzeichnis oder einer Anwendung aus?

Beispiel: Ich hatte das gleiche Problem, als ich mein Projekt auf meinen lokalen IIS unter der Standardwebsite> SampleWebAPI verschoben habe. Ich glaube, das liegt an der Änderung des URLRoutings wie folgt:

Original: localhost:3092/api/values
Umgezogen: localhost/SampleWebAPI/api/values

Wenn Sie das Web-API-Projekt auf eine eigene Website verschieben, die auf einem anderen Port ausgeführt wird, scheint es zu funktionieren.

Zusätzlicher Hinweis: Ich habe das Problem weiter verkompliziert, indem ich apials Alias ​​einer Anwendung auf meiner Website Folgendes hinzugefügt habe, wodurch Folgendes wirksam wurde URL:

localhost:81/api/api/values - bemerkte dies, nachdem die Website auf eine eigene Website verschoben wurde

Da ich eine Trennung zwischen meiner Website und der Web-API-MVC-Projektwebsite beibehalten wollte, habe ich die Routing-Regeln global.asaxfür die Web-API "DefaultAPI" von api/{controller}/{id}bis {controller}/{id}und für die ASP.NET MVC Defaultvon {controller}/{id}bis geändert info/{controller}/{id}.

Nicholas Barger
quelle
3
hehehe ... ich hatte meine app auch IISso genannt api. Dies führte zu mehr als 2 Stunden langem Debuggen von Versuchen und Fehlern. Vielen Dank für das Teilen Ihrer Erfahrungen! Umbenannt und jetzt bin ich wieder im Geschäft. : D
Leniel Maccaferri
Danke - das war mein Problem! :)
Jen
Ich bin nicht sicher, warum die API-Aufrufe fehlgeschlagen sind, als ich mein Projekt unter einem Port 8080 gehostet hatte. Nur das Verschieben als virtuelles Verzeichnis unter die Standard-Website hat den Trick getan :)
Kiran
14

Dies ist die einzige Antwort, die für mich funktioniert hat ...

Ich hatte ein ähnliches Problem ... Es schien, als würde, egal was ich tat, nichts umgeleitet und meine globale Datei wurde einfach ignoriert. Ich dachte ernsthaft darüber nach, alles zu beenden, bevor ich diese Antwort fand. Ich hoffe dieser Link hilft jemand anderem.


Das Hinzufügen von Folgendem zur Datei web.config hat bei mir funktioniert:

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

Das system.webServer- Tag war natürlich schon da, aber ich habe das Module- Tag hinzugefügt und dann das Remove & Add- Tag zum Module-Tag.

Schief
quelle
Treffen Sie dieses Problem auf einem 2008er (nicht R2) Server, und dies war die einzige Lösung, die für mich funktioniert hat. Außerdem musste ich dies mit dem Einstellen des App-Pools in den "integrierten" Modus kombinieren.
Zoomzoom
11

Ein paar Dinge zu überprüfen:

  1. Stellen Sie sicher, dass Sie .NET Framework 4 installiert haben.
  2. Stellen Sie sicher, dass Version 4 von .NET Framework für Ihre Website und Ihr virtuelles Verzeichnis ausgewählt ist (falls zutreffend).
  3. Stellen Sie sicher, dass Sie MVC installiert haben oder die entsprechenden DLLs in Ihrem bin-Verzeichnis haben.
  4. Möglicherweise müssen ASP.NET 4.0-Webdiensterweiterungen zugelassen werden
  5. Stellen Sie die Anwendung in einen eigenen App-Pool.
  6. Stellen Sie sicher, dass das Verzeichnis mindestens über Ausführungsberechtigungen "Nur Skripte" verfügt.
Joe Schrag
quelle
Ich habe 4 andere normale Webanwendungen, die auf demselben IIS-Server ausgeführt werden, und alle verwenden .net Framework 4. Welche dieser 4 Punkte werden also nicht benötigt? Als ich meine MVC-Anwendung veröffentlichte, fügte ich die Add Deployable Dependencies hinzu und fügte ASP.NET MVC hinzu, so dass es sich in meinem Bin-Verzeichnis befindet
Armand
@Armand Klingt so, als hättest du # 1 gemacht. # 2 ist noch notwendig. Das Hinzufügen von bereitstellbaren Abhängigkeiten, wenn Sie dies wie hier beschrieben getan haben: haacked.com/archive/2011/05/25/bin-deploying-asp-net-mvc-3.aspx , sollte sich um # 3 oben kümmern. # 4 kann notwendig sein oder auch nicht, obwohl ich nicht das Wissen habe, Ihnen zu sagen, wann es ist und nicht benötigt wird.
Joe Schrag
9

Ich hatte ein ähnliches Problem. Ich hatte die richtigen Einstellungen in meiner Datei web.config, führte den Anwendungspool jedoch im klassischen Modus und nicht im integrierten Modus aus

Bildschirmfoto

Rob Sedgwick
quelle
7

Dieses Problem kann auch aus folgenden Gründen auftreten

1.In der Web.Config

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

2.Stellen Sie sicher, dass im Ordner bin auf dem Server, auf dem die Web-API bereitgestellt wird, Folgendes verfügbar ist

  • System.Net.Http

  • System.Net.Http.Formatting

  • System.Web.Http.WebHost

  • System.Web.Http

Diese Assemblys werden standardmäßig nicht in den Ordner bin kopiert, wenn die Veröffentlichung über Visual Studio erfolgt, da die Web-API-Pakete über Nuget auf dem Entwicklungscomputer installiert werden. Wenn Sie jedoch möchten, dass diese Dateien als Teil der Visual Studio-Veröffentlichung verfügbar sind, müssen Sie CopyLocal für diese Assemblys auf True setzen

Sadish Kumar.V

Sadish Kumar V.
quelle
Diese DLLs sind erforderlich, wenn Sie MVC nicht auf dem Server installiert haben. In meinem Fall wurde beim Aufrufen der APIs eine leere Seite angezeigt. Das manuelle Hinzufügen der DLLs hat bei mir funktioniert. Vielen Dank!!
Vipul Bhojwani
Mein Problem wurde gelöst, nachdem ich System.Net.Http zum Hauptveröffentlichungsordner hinzugefügt hatte. Mein Problem war die Asp.net Core-Lösung
mohas
6

Auf der Grundlage dieser SO Antwort , die ich ändern habe gerade path="*."zu path="*"für die hinzugefügte ExtensionlessUrlHandler-Integrated-4.0in configuration>system.WebServer>handlersmeinemweb.config

Vor:

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

Nach dem:

<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*" verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
Greg
quelle
Vielen Dank Greg, ich wollte mich wegen dieses dummen Pfades umbringen = "*". Aber jetzt, nachdem wir diesen elenden Punkt fallen gelassen haben, funktioniert alles einwandfrei! Vielen Dank!
Junior Silva
5

Ich bin auch auf dieses Problem gestoßen. Ich habe das Problem gelöst, indem ich zu Anwendungspools> Name des Anwendungspools gegangen bin und .NET Framework von Version 2.0.50727 auf Version 4.0.30319 geändert habe.

coson
quelle
1
Das habe ich auch selbst entdeckt. Stimmen Sie Ihre Antwort ab, weil sie leicht zu übersehen ist. Wenn ich eine Site für meine App erstellt habe, hat IIS automatisch einen App-Pool für mich erstellt, der auf .NET v2.0 festgelegt ist. Warum, warum, warum? :)
Mike Taverne
3

Ich musste die Dateiveröffentlichungsoption "Während der Veröffentlichung vorkompilieren" deaktivieren.

Pakman
quelle
Und wo machst du das?
Vapcguy
1
Es wird in einem Dialogfeld angezeigt, das angezeigt wird, wenn Sie mit der rechten Maustaste auf das Projekt klicken und Veröffentlichen auswählen. Es sieht so aus
Pakman
3

Es gibt einen offiziellen Fix von Microsoft: http://support.microsoft.com/kb/980368

Ich empfehle dringend, <modules runAllManagedModulesForAllRequests = "true"> zu verwenden. Dies führt dazu, dass alle Anforderungen (auch JPG, CSS, PDF usw.) von allen registrierten HTTP-Modulen verarbeitet werden. Es gibt zwei negative Momente: a) zusätzliche Belastung der Hardwareressourcen; b) mögliche Fehler, da http-Module neue Arten von Inhalten verarbeiten.

Roman O.
quelle
1
Vielen Dank so viel! Ich habe absolut alles andere versucht, und dies war das einzige, was das Problem behoben hat.
Oran Dennison
Gleiches hier, vielen Dank, dass Sie diese Antwort hinzugefügt haben! War die Lösung für mein Problem!
Octavio Garbarino
2

Ich habe 404 Antworten von der Web-API erhalten, nachdem ich einem Windows Azure-Lernprogramm gefolgt war, in dem ich aufgefordert wurde, meinem Projekt eine Datei "WebRole.cs" hinzuzufügen.

Nachdem ich "WebRole.cs" aus meinem Projekt entfernt hatte, funktionierten meine Web-API-Aufrufe wieder.

Josh Mouch
quelle
Das hat bei mir funktioniert. Ich habe eine Azure-Anwendung zurück auf eine VM-Bereitstellung migriert. Nachdem ich den Inhalt von WebRole.cs auskommentiert hatte, funktionierten meine WebAPI-Aufrufe wieder.
Scott
Ich muss einen Tag damit verbracht haben! Das Kommentieren von WebRole.cs hat funktioniert - ich frage mich warum
Igorek
2

Stellen Sie sicher, dass sich der Anwendungspool im integrierten Modus befindet,
und fügen Sie der Datei web.config Folgendes hinzu:

<system.webServer>
    .....
    <modules runAllManagedModulesForAllRequests="true" />
    .....
</system.webServer>
Rakesh
quelle
2

In meinem Fall war das Problem einfach, dass ich versuchte, auf die Site unter zuzugreifen

myserver.myintranet.com/mysite

Für die Website-Bindung für http in IIS wurde jedoch nicht der in der Bindung angegebene Hostname angegeben. Es hatte schon früher funktioniert und ich habe keine Ahnung, wie das weggeblasen wurde.

Nachdem ich myserver.myintranet.comden Hostnamen eingegeben hatte, war der 404 verschwunden.

In IIS Manager gehen Sie im Aktionsbereich zu Bindungen ... und bearbeiten dann die http-Bindung, um den Hostnamen anzugeben.

toddmo
quelle
Sogar ich stehe vor dem gleichen Problem. und wie Sie vorgeschlagen haben, habe ich den Hostnamen in der http-Bindung überprüft und er wurde nur ordnungsgemäß aktualisiert. Trotzdem bleibt mein Problem bestehen. Hinweis: Ich habe meine API-Anwendung als untergeordnete Anwendung gehostet. Bitte schlagen Sie vor, wenn jemand eine Idee dazu hat. Beispiel: "sample.example.com" ist meine Hauptanwendung und hat eine API unter dieser Domain als "sample.example.com/myAPI/" erstellt
Krishna Mani
2

Vergessen Sie nicht, global.asax bereitzustellen

Adem Aygun
quelle
1

Hatte das gleiche Problem, eine 404-Antwort für die Web-API-Controller, wenn sie vom IIS bereitgestellt wurden, aber ab VS2010 funktionierte alles einwandfrei. Keine der oben genannten Lösungen hat bei mir funktioniert. Schließlich stellte ich fest, dass das Problem darin bestand, dass wir die WSE 3.0-Unterstützung für die Anwendung hinzugefügt haben und die DLL Microsoft.Web.Services3 im Verzeichnis / bin der Anwendung fehlte. Seltsam, aber nach dem Kopieren der DLL begann die Routenzuordnung zu funktionieren.

Devilcius
quelle
1

Für mich war das Problem, dass die Root-Site für die Verwendung eines .NET 2.0-App-Pools konfiguriert wurde und meine Anwendung auf dieser Site .NET 4.5 war.

Ich habe eine neue Site mit einem .NET 4-App-Pool erstellt und meine Anwendung im Stammverzeichnis platziert - und das hat gut funktioniert.

JuniorEbuka
quelle
1

Ich hatte auch damit zu kämpfen. Mein genaues Problem war, dass ich einen ASMX-Webdienst hatte, der mir, wenn ich einen Parameter in eine Webmethode eingab und ihn testete, die 404 gab. Die bestimmte Methode hatte in der Vergangenheit gut funktioniert und war nicht geändert worden. nur neu veröffentlicht. Dann bin ich hierher gekommen und habe alle geposteten Antworten ausprobiert und nichts hat geholfen.

Meine ultimative Lösung? Ich weiß, dass dies drastisch ist, aber ich habe gerade eine neue Visual Studio-Lösung und ein neues Webprojekt erstellt. Ausgewählte MVC, dann habe ich ein "Hinzufügen"> "Neues Element" gemacht, darunter "Visual C #"> "Web" und "Web Service (ASMX)" ausgewählt. Ich habe meinen gesamten alten CodeBehind-Code kopiert, dann den Namespace notiert, den die neue Datei in meinem neuen Projekt erhalten hat, dann meinen gesamten alten Code in die neue CodeBehind-Datei im neuen Projekt eingefügt und den Namespace eingefügt zurück zu dem, was es gewesen war.

Dann habe ich meine Ordner in meinem Projekt erstellt, die ich vor der Verwendung von Visual Studio für "Hinzufügen"> "Neuer Ordner" hatte, dann mit Windows Explorer in meine Dateien zurück in die Ordner meines anderen Projekts kopiert und dann mit der rechten Maustaste auf jeden Ordner geklickt Visual Studio und hat "Hinzufügen"> "Vorhandenes Element ..." ausgeführt und die Elemente in diesen Ordnern in die Visual Studio-Ordner meines neuen Projekts gezogen. Ich habe erneut auf alle meine .NET-Assemblys verwiesen, wobei beide Projekte geöffnet waren, damit ich vergleichen konnte, auf welche ich zuvor verwiesen hatte (es gab mehrere). Ich musste mein neues Projekt etwas anders benennen - im Grunde habe ich etwas getan, das mit "GeneralWebApp" anstelle von "MyWebApp" vergleichbar war - also musste ich in meiner gesamten Lösung "Alle ersetzen" ausführen, um diesen Namen zu ersetzen.

Dann habe ich ein "Alle neu erstellen" für das Projekt durchgeführt und es dann mit der Schaltfläche "Abspielen" gestartet, die Visual Studio gibt, wenn ich es richtig erstellt habe. Es hat gut funktioniert. Also habe ich es veröffentlicht und alles war in Ordnung auf dem Server, auf dem ich es veröffentlicht habe, als ich es von dort aus ausgeführt habe. Ich habe keine Erklärung, was passiert ist, aber so bin ich durchgekommen. Es ist kein schlechter Test, nur um zu sehen, ob etwas, das Visual Studio tut, es vermasselt hat.

vapcguy
quelle
0

Welche Art von HTTP-Anfrage stellen Sie?

Dies ist eine Antwort im linken Feld. Haben Sie jedoch versucht, die IIS-Standardfehlerseite für 404 zu entfernen, um zu überprüfen, was Ihre API tatsächlich zurückgibt?

Ich hatte ein Problem, bei dem ich wollte, dass eine Controller-Methode einen 404 zurückgibt, wenn ich die falsche ID darauf poste. Ich habe festgestellt, dass ich immer die IIS 404-Seite "Datei oder Verzeichnis nicht gefunden" anstelle der HTTP-Antwort von meiner API erhalten habe. Durch Entfernen der Standard-404-Fehlerseite wurde das Problem behoben.

Anderes Problem, aber Sie wissen nie, dass es helfen kann;)

Oliver Picton
quelle
0

Diese Konfiguration in der Datei web.config kann mir dabei helfen: im Abschnitt system.webServer:

      <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>      
Konstantin Isaev
quelle
0

Ich hatte vor kurzem einen 404 nicht gefundenen Fehler mit allen meinen Web Api 2 Routen / Controllern. Also ging ich auf den eigentlichen Server und versuchte, mit localhost anstelle des Hostnamens zu surfen und bekam "404.7 Not Found - Das Anforderungsfiltermodul ist so konfiguriert, dass die Dateierweiterung verweigert wird".

Dieser SO-Beitrag hilft mir bei der Lösung.

Santos
quelle
0

Es wurde für mich behoben, als ich das Kontrollkästchen für UrlRoutingModule-4.0 aktivierte:

IIS-Manager> Module> Wählen Sie UrlRoutingModule-4.0> Modul bearbeiten> Aktivieren Sie das Kontrollkästchen "Nur für Anforderungen an ASP.NET-Anwendungen oder verwaltete Handler aufrufen".

Anilkumar Y.
quelle
0

Ich hatte das gleiche Problem: Auf einem neu installierten Computer mit Visual Studio 2013 arbeitete das Web-API-Projekt unter IISExpress, jedoch nicht unter lokalem IIS. Ich habe alles versucht, was ich finden konnte, aber am Ende war das Problem mit der Web-API nicht notwendig, sondern mit MVC: Selbst wenn es installiert war, wurde kein MVC-Projekt ausgeführt.

Für mich funktionierte es, IIS (von ADD / REMOVE Windows Features) zu deinstallieren, dann neu zu installieren und dann aspnet_regiis -i auszuführen. Vielleicht hilft das jemand anderem.

Marian Siminescu
quelle
0

Ich habe viel Zeit damit verbracht, viele Dinge auszuprobieren, um endlich zu erkennen, dass ich meine Web-App nicht auf Websites / Standard-Websites, sondern auf einer anderen Website hinzugefügt habe, die an einen anderen Port gebunden ist. Offensichtlich würde ein Versuch von localhost auf Port 80 einen 404 ergeben.

Guiomie
quelle
0

Ich mache nichts, füge einfach dieses Tag in web.config hinzu, es funktioniert dieses Problem, wenn einer der folgenden Punkte auftaucht

  1. Verwenden Sie Web Api im selben Projekt mit MVC- oder asp.net-Formularen

  2. Verwenden Sie RouteConfig und WebApiConfig in Global.asax als GlobalConfiguration.Configure (WebApiConfig.Register). RouteConfig.RegisterRoutes (RouteTable.Routes);

  3. Verwenden Sie RouteConfig für zwei Zwecke, asp.net-Formulare mit Friendlyurl- und MVC-Routing für MVC-Routing

Wir verwenden dieses Tag nur in web.config, es wird funktionieren.

<system.webServer>
<modules runAllManagedModulesForAllRequests="true">
   .........................
</modules>
</system.webServer>
adnan
quelle
0

Ist auf dasselbe Problem mit der Web-API und der .Net Core-Web-API gestoßen. Funktionierte in VS 2017 beim Debuggen einwandfrei, gab jedoch bei Veröffentlichung in IIS 7.5 404 zurück. Die Lösung für mich bestand darin, die Art und Weise zu ändern, in der ich die Site erstellt habe. Anstatt im Stammverzeichnis einer Website zu veröffentlichen (erstellt durch Klicken mit der rechten Maustaste auf Websites ... Website hinzufügen), musste ich eine Anwendung erstellen (erstellt durch Klicken mit der rechten Maustaste auf eine Website ... Anwendung hinzufügen) und in diesem Ordner veröffentlichen. Beachten Sie, dass ich für die Core-Version die .NET Framework-Versionseinstellung des Anwendungspools in "Kein verwalteter Code" ändern musste.

miked
quelle
0

Für mich bestand die Lösung darin , die folgenden Zeilen aus meiner Datei web.config zu entfernen:

<dependentAssembly>
    <assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-4.1.1.3" newVersion="4.1.1.3" />
</dependentAssembly>
<dependentAssembly>
    <assemblyIdentity name="Microsoft.IdentityModel.Tokens" publicKeyToken="31bf3856ad364e35" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-5.5.0.0" newVersion="5.5.0.0" />
</dependentAssembly>

Ich bemerkte, dass VS sie automatisch hinzugefügt hatte, nicht sicher warum

Protango
quelle
0

Versuchen Sie diese Webconfg .. ersetzen Sie "NewsApi.dll" durch Ihre Haupt-DLL!


<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <location path="." inheritInChildApplications="false">
    <system.webServer>
      <handlers>
        <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
      </handlers>
      <aspNetCore processPath="dotnet" arguments=".\NewsApi.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" />
    </system.webServer>
  </location>
</configuration>
Prime By Design
quelle
0

Wenn Sie nur den Ordner bin in IIS ablegen (nach dem Erstellen des Projekts), tritt auch dieses Problem auf. In dieser Situation sollten Sie veröffentlichen das Projekt mit Visual Studio, dann legen Sie die veröffentlichten Ordner in IIS.

Emad Armoun
quelle