Mam aplikację Web Api. Działa doskonale, gdy testowałem go przy użyciu serwera debugującego VS 2010. Ale teraz wdrożyłem go w IIS 7.5 i otrzymuję błąd HTTP 404 podczas próby uzyskania dostępu do aplikacji.
Oto mój plik 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>
Odpowiedzi:
Ja też z tym walczyłem. Na szczęście, Steve Michelotti udokumentowane rozwiązanie, które pracowały dla mnie tutaj .
Pod koniec dnia włączyłem wszystkie czasowniki (verb = "*") do modułu obsługi ExtensionlessUrlHandler-Integrated-4.0 w mojej konfiguracji sieciowej.
Inni wskazywali, że włączenie WebDAV powoduje problemy. Na szczęście ja też nie napotkałem tego problemu.
źródło
*
. Musiałem również zmienić ścieżkę, aby*
działała, ponieważ*.
nadal powodowała problemMiał ten sam problem. To ustawienie konfiguracji rozwiązało problem.
Jak wyjaśniono w http://www.britishdeveloper.co.uk/2010/06/dont-use-modules-runallmanagedmodulesfo.html , należy unikać powyższego rozwiązania. Użyj tego zamiast tego. To samo rozwiązanie oferuje również Lopsided. Przechowywanie go tutaj, aby użytkownicy mogli uniknąć wdrażania pierwszego działającego rozwiązania.
źródło
Jeśli usługi IIS są instalowane lub włączane po ASP.NET, należy ręcznie zarejestrować ASP.NET w usługach IIS, aby aplikacja .NET działała.
W systemie Windows 7 i wcześniejszych:
W przypadku systemu Windows 8 i nowszych:
źródło
Czy używasz aplikacji interfejsu API sieci Web w katalogu wirtualnym lub aplikacji?
Na przykład: miałem ten sam problem, kiedy przeniosłem projekt do lokalnych usług IIS w domyślnej witrynie sieci Web> SampleWebAPI. Uważam, że wynika to ze zmiany w
URL
routingu:Oryginalny:
localhost:3092/api/values
przeniesiony:
localhost/SampleWebAPI/api/values
Jeśli przeniesiesz projekt interfejsu API sieci Web do własnej witryny internetowej działającej na innym porcie, wydaje się, że działa.
Dodatkowa uwaga: dodatkowo skomplikowałem sprawę, dodając
api
jako alias aplikacji w mojej witrynie, która spowodowała skutecznośćURL
był:localhost:81/api/api/values
- zauważyłem to po przeniesieniu serwisu na własną stronęDlatego, ponieważ chciałem zachować oddzielenie między moją witryną internetową a witryną projektu
global.asax
Web API MVC , zmieniłem reguły routingu w interfejsie Web API „DefaultAPI” zapi/{controller}/{id}
na,{controller}/{id}
a ASP.NET MVCDefault
z{controller}/{id}
nainfo/{controller}/{id}
.źródło
IIS
jakapi
też. Spowodowało to wszystkie te próby i błędy debugowania przez ponad 2 godziny. Dziękuję bardzo za podzielenie się swoimi doświadczeniami! Zmieniłem nazwę i teraz wróciłem do biznesu. : DTo jedyna odpowiedź, która mi pomogła ...
Miałem podobny problem ... Wyglądało na to, że bez względu na to, co zrobiłem, nic nie było przekierowywane, a mój plik globalny był po prostu ignorowany. Poważnie rozważałem zakończenie tego wszystkiego, zanim znalazłem tę odpowiedź. Mam nadzieję, że ten link pomoże komuś innemu.
Dodanie następujących elementów do pliku web.config działało dla mnie:
Znacznik system.webServer już tam był, ale dodałem do niego tag modules , a następnie tag remove & add to modules.
źródło
Kilka rzeczy do sprawdzenia:
źródło
Miałem podobny problem. Miałem odpowiednie ustawienia w moim pliku web.config, ale pula aplikacji była uruchamiana w trybie klasycznym, a nie w trybie zintegrowanym
źródło
Ten problem może również wystąpić z następujących powodów
W sieci Web.Config
2. Upewnij się, że następujące elementy są dostępne w folderze bin na serwerze, na którym wdrożono interfejs API sieci Web
System.Net.Http
System.Net.Http.Formatting
System.Web.Http.WebHost
System.Web.Http
Te zestawy nie zostaną domyślnie skopiowane do folderu bin, jeśli publikowanie odbywa się za pośrednictwem programu Visual Studio, ponieważ pakiety interfejsu API sieci Web są instalowane za pośrednictwem narzędzia NuGet na komputerze deweloperskim. Jeśli jednak chcesz, aby te pliki były dostępne w ramach publikowania w programie Visual Studio, musisz ustawić CopyLocal na True dla tych zestawów
Sadish Kumar.V
źródło
Na podstawie tej SO odpowiedź , po prostu musiał zmienić
path="*."
siępath="*"
dla dodanyExtensionlessUrlHandler-Integrated-4.0
wconfiguration>system.WebServer>handlers
w moimweb.config
Przed:
Po:
źródło
Ja też napotkałem ten problem. Rozwiązałem problem, przechodząc do puli aplikacji> Nazwa puli aplikacji i zmieniłem platformę .NET Framework z wersji 2.0.50727 na 4.0.30319.
źródło
Musiałem wyłączyć opcję „Prekompiluj podczas publikowania”.
źródło
Istnieje oficjalna poprawka firmy Microsoft: http://support.microsoft.com/kb/980368
Zdecydowanie NIE polecam używania <modułów runAllManagedModulesForAllRequests = "true">. Prowadzi to do tego, że wszystkie żądania (nawet .jpg, .css, .pdf itp.) Będą przetwarzane przez wszystkie zarejestrowane moduły HTTP. Są dwa negatywne momenty: a) dodatkowe obciążenie zasobów sprzętowych; b) potencjalne błędy, ponieważ moduły http będą przetwarzać nowe typy treści.
źródło
Zacząłem otrzymywać odpowiedzi 404 z internetowego interfejsu API po wykonaniu samouczka systemu Windows Azure, w którym zalecono mi dodanie pliku „WebRole.cs” do mojego projektu.
Po usunięciu „WebRole.cs” z mojego projektu, moje wywołania interfejsu API sieci Web znów zaczęły działać.
źródło
Upewnij się, że pula aplikacji jest w trybie zintegrowanym
i dodaj następujące elementy do pliku web.config:
źródło
W moim przypadku problem polegał po prostu na tym, że próbowałem uzyskać dostęp do witryny pod adresem
myserver.myintranet.com/mysite
Jednak powiązanie witryny sieci Web dla protokołu http w usługach IIS nie miało nazwy hosta określonej w powiązaniu. To działało wcześniej i nie mam pojęcia, jak to się zdmuchnęło.
Kiedy
myserver.myintranet.com
podałem nazwę hosta, 404 zniknął.W Menedżerze IIS przechodzisz do Powiązania ... w okienku akcji, a następnie edytuj powiązanie http, aby określić nazwę hosta.
źródło
Nie zapomnij wdrożyć global.asax
źródło
Wystąpił ten sam problem, odpowiedź 404 dla kontrolerów interfejsu API sieci Web podczas obsługi z IIS, ale wszystko działało dobrze od VS2010. Żadne z powyższych rozwiązań nie zadziałało. W końcu odkryłem, że problem polegał na tym, że dodaliśmy obsługę WSE 3.0 dla aplikacji i brakowało biblioteki dll Microsoft.Web.Services3 w katalogu aplikacji / bin. Dziwne, ale po skopiowaniu dll zaczęło działać mapowanie tras.
źródło
Dla mnie problem polegał na tym, że witryna główna została skonfigurowana do korzystania z puli aplikacji .NET 2.0, a moja aplikacja w tej witrynie to .NET 4.5.
Utworzyłem nową witrynę z pulą aplikacji .NET 4 i umieściłem moją aplikację w katalogu głównym - i to działało dobrze.
źródło
Ja też z tym walczyłem. Mój dokładny problem polegał na tym, że miałem usługę sieciową ASMX, która po wprowadzeniu parametru do metody sieciowej i przetestowaniu jej dawała mi 404. Konkretna metoda działała dobrze w przeszłości i nie została zmieniona, tylko ponownie opublikowane. Potem dotarłem tutaj i wypróbowałem wszystkie opublikowane odpowiedzi i nic nie pomogło.
Moje ostateczne rozwiązanie? Wiem, że to drastyczne, ale właśnie stworzyłem nowe rozwiązanie Visual Studio i projekt sieci Web. Wybrałem MVC, a następnie wykonałem „Dodaj”> „Nowy element”, zaznaczono pod nim „Visual C #”> „Sieć” i „Usługa sieci Web (ASMX)”. Skopiowałem cały mój stary kod związany z kodem, następnie zanotowałem przestrzeń nazw, którą dał nowy plik w moim nowym projekcie, a następnie wkleiłem cały mój stary kod do nowego pliku związanego z kodem w nowym projekcie i umieściłem przestrzeń nazw z powrotem do tego, co było.
Następnie utworzyłem foldery w moim projekcie, które miałem przed użyciem programu Visual Studio do „Dodaj”> „Nowy folder”, a następnie skopiowałem z powrotem do folderów z innego projektu za pomocą Eksploratora Windows, a następnie kliknąłem prawym przyciskiem myszy każdy folder w Visual Studio i wykonałem polecenie „Dodaj”> „Istniejący element ...” i pobrałem elementy z tych folderów do folderów programu Visual Studio mojego nowego projektu. Ponownie odwołałem się do wszystkich moich zestawów .NET, mając otwarte oba projekty, więc mogłem porównać, do których odwoływałem się wcześniej (było ich kilka). Musiałem nazwać mój nowy projekt nieco inaczej - w zasadzie zrobiłem coś podobnego do „GeneralWebApp” zamiast na przykład „MyWebApp” - więc musiałem wykonać polecenie „Replace All” w całym rozwiązaniu, aby zastąpić tę nazwę,
Następnie wykonałem „Przebuduj wszystko” w projekcie, a następnie uruchomiłem go przyciskiem „Odtwórz”, który program Visual Studio wyświetla, gdy mam go poprawnie zbudować. Działało dobrze. Więc opublikowałem to i wszystko było w porządku na serwerze, na którym to opublikowałem, kiedy to uruchomiłem. Nie mam wyjaśnienia, co się stało, ale tak właśnie przez to przeszedłem. Nie jest to zły test, aby sprawdzić, czy coś, co robi Visual Studio, zepsuło go.
źródło
Jeśli umieścisz tylko folder bin w usługach IIS (po skompilowaniu projektu), ten problem również wystąpi. W takiej sytuacji należy opublikować projekt za pomocą VisualStudio, a następnie umieścić opublikowany folder w usługach IIS.
źródło
Jakiego rodzaju żądania HTTP wykonujesz?
To jest nieco lewe pole odpowiedzi, ale czy próbowałeś usunąć domyślną stronę błędu usług IIS dla 404, aby sprawdzić, co faktycznie zwraca Twój interfejs API?
Wystąpił problem polegający na tym, że chciałem, aby metoda kontrolera zwracała kod 404, gdy POSTAŁEM niewłaściwy identyfikator. Zauważyłem, że zawsze otrzymuję stronę IIS 404 „Nie znaleziono pliku lub katalogu” zamiast odpowiedzi HTTP z mojego interfejsu API. Usunięcie domyślnej strony błędu 404 rozwiązało problem.
Inny problem, ale nigdy nie wiesz, że może pomóc;)
źródło
Ta część konfiguracji w pliku web.config może mi pomóc: w sekcji system.webServer:
źródło
Niedawno wystąpił błąd 404 Not Found we wszystkich moich trasach / kontrolerach Web Api 2. Więc wszedłem na rzeczywisty serwer i spróbowałem przeglądać używając localhost zamiast nazwy hosta i otrzymałem "404.7 Not Found - moduł filtrowania żądań jest skonfigurowany tak, aby odmawiać rozszerzenia pliku".
Ten wpis SO pomoże mi go rozwiązać.
źródło
Problem został rozwiązany dla mnie, kiedy włączam pole wyboru dla UrlRoutingModule-4.0:
Menedżer IIS> Moduły> wybierz UrlRoutingModule-4.0> Edytuj moduł> zaznacz pole wyboru „Wywołaj tylko dla żądań do aplikacji ASP.NET lub zarządzanych programów obsługi”.
źródło
Miałem ten sam problem: na nowo zainstalowanej maszynie z Visual Studio 2013 projekt interfejsu API sieci Web działał pod IISExpress, ale nie pod lokalnymi IIS. Próbowałem wszystkiego, co mogłem znaleźć, ale ostatecznie problem nie był konieczny z Web API, ale z MVC: nawet gdy był zainstalowany, żaden projekt MVC nie działał.
Pomogło mi odinstalowanie usług IIS (z DODAJ / USUŃ funkcje systemu Windows), a następnie ponowne ich zainstalowanie i uruchomienie aspnet_regiis -i. Może to pomoże komuś innemu.
źródło
Spędziłem dużo czasu próbując wielu rzeczy, aby w końcu zdać sobie sprawę, że dodawałem moją aplikację internetową nie w Witrynach / Domyślnych Witrynach internetowych, ale w innej witrynie połączonej z innym portem. Oczywiście wypróbowanie localhost na porcie 80 dałoby 404.
źródło
nic nie robię, po prostu dodaj ten tag w web.config, jego działanie w tym problemie pojawia się jeden z następujących punktów
Użyj interfejsu API sieci Web w tym samym projekcie przy użyciu formularzy MVC lub asp.net
Użyj RouteConfig i WebApiConfig w Global.asax jako GlobalConfiguration.Configure (WebApiConfig.Register); RouteConfig.RegisterRoutes (RouteTable.Routes);
Użyj RouteConfig do 2 celów, formularzy asp.net przy użyciu z przyjaznym adresem URL i routingiem MVC dla routingu MVC
po prostu używamy tego tagu w web.config, to zadziała.
źródło
Napotkałem ten sam problem z interfejsem API sieci Web i interfejsem API sieci Web .Net Core. Działał dobrze w VS 2017 podczas debugowania, ale zwrócił 404 po opublikowaniu w usługach IIS 7.5. Rozwiązaniem dla mnie była zmiana sposobu tworzenia strony. Zamiast publikować w katalogu głównym witryny sieci Web (utworzonej przez kliknięcie prawym przyciskiem Witryny ... Dodaj witrynę sieci Web), musiałem utworzyć aplikację (utworzoną przez kliknięcie witryny sieci Web prawym przyciskiem myszy ... Dodaj aplikację) i opublikować w tym folderze. Zauważ, że w przypadku wersji Core musiałem zmienić ustawienie wersji puli aplikacji .NET Framework na „Brak kodu zarządzanego”.
źródło
Dla mnie rozwiązaniem było usunięcie następujących wierszy z mojego pliku web.config:
Zauważyłem, że VS dodał je automatycznie, nie wiem dlaczego
źródło
Wypróbuj ten webconfg .. zamień plik „NewsApi.dll” na swój główny plik DLL!
źródło