Niedawno zaktualizowałem program Visual Studio 2010 do Visual Studio 2012 RC. Instalator instaluje również usługi IIS 8 Express, których program Visual Studio używa teraz jako domyślny serwer sieci Web.
IIS 8 blokuje żądania WEB API, które używają czasowników PUT AND DELETE. IIS zwraca błąd 405,The requested resource does not support http method 'PUT'
.
Wiem, że ludzie mieli z tym problemy w przeszłości i jest kilka wiadomości na ten temat w Stack Overflow. W przypadku IIS 7 Express rozwiązaniem było odinstalowanie WebDav. Niestety nie widzę sposobu, aby to zrobić z IIS 8.
Próbowałem edytować sekcje WebDav z applicationhost.config, ale to nie pomogło. Na przykład usunąłem<add name="WebDAVModule" image="%IIS_BIN%\webdav.dll" />
z pliku konfiguracyjnego.
Spędziłem nad tym o wiele za długo. Musi istnieć prosty sposób na włączenie funkcji PUT i DELETE?
źródło
ExtensionlessUrl-Integrated-4.0
.Odpowiedzi:
W porządku. W końcu dotarłem do sedna tego. Musisz przeskoczyć przez kilka obręczy, aby czasowniki PUT i DELETE działały poprawnie z usługami IIS8. W rzeczywistości, jeśli zainstalujesz wersję Release Candidate VS 2012 i utworzysz nowy projekt WEB API, okaże się, że przykładowe metody PUT i DELETE zwracają błędy 404 po wyjęciu z pudełka.
Aby użyć czasowników PUT i DELETE z interfejsem API sieci Web, musisz edytować% userprofile% \ documents \ iisexpress \ config \ applicationhost.config i dodać czasowniki do modułu obsługi ExtensionlessUrl w następujący sposób:
Zmień tę linię:
do:
Oprócz powyższego upewnij się, że WebDAV nie koliduje z Twoimi żądaniami. Można to zrobić, wykomentowując następujące wiersze z pliku applicationhost.config.
Należy również pamiętać, że domyślna konwencja interfejsu API sieci Web polega na tym, że nazwa metody powinna być taka sama, jak wywoływana zlecenie HTTP. Na przykład, jeśli wysyłasz żądanie usunięcia HTTP, Twoja metoda powinna mieć domyślnie nazwę Delete.
źródło
WebDAVModule
z sekcji modułów, zgodnie z odpowiedzią Santosh Sah .Zmień plik Web.Config jak poniżej. Będzie działać jak urok.
W węźle
<system.webServer>
dodaj poniższą część koduPo dodaniu Twój Web.Config będzie wyglądał jak poniżej
źródło
WebDAVModule
jest istotna."ExtensionlessUrlHandler-Integrated-4.0"
(jak w powyższej odpowiedzi), podczas gdy IIS 8.5 ma zmienioną nazwę na"ExtensionlessUrl-Integrated-4.0"
(również wspomniana przez Marka S. Nazwa procedury obsługi jest pokazana w stronę błędu IIS, gdy pojawi się błąd, więc wiedza, którą ustawić, powinna być banalna. Używam obu nazw w celu obsługi różnych środowisk hostingowych.Usuń WebDAV działa idealnie w moim przypadku:
zawsze lepiej jest rozwiązać problem przez web.config zamiast naprawiać go za pomocą iis lub machine.config, aby zagwarantować, że nie stanie się to, jeśli aplikacja będzie hostowana na innym komputerze
źródło
Zaktualizuj plik web.config
http://odetocode.com/blogs/scott/archive/2012/08/07/configuration-tips-for-asp-net-mvc-4-on-a-windows.aspx
Eliminuje potrzebę modyfikowania konfiguracji hosta.
źródło
W Asp.Net Web API - webconfig. Działa to we wszystkich przeglądarkach.
Dodaj następujący kod wewnątrz tagu System.web
Zastąp swój tag system.webserver poniższym kodem
źródło
system.webserver
sekcji powinna wystarczyć - po prostu upewnij się, że masz odpowiednią nazwę dla obsługi bez rozszerzeń adresów URL.działało to dla mnie na iis8 razem z niektórymi innymi odpowiedziami. Mój błąd to 404.6
źródło
Tylko szybka aktualizacja dla każdego, kto może napotkać ten problem. Od dzisiaj zmiana% userprofile% \ documents \ iisexpress \ config \ applicationhost.config NIE działa już (do tej pory działało dobrze, nie jestem pewien, czy jest to spowodowane aktualizacją systemu Windows). Po wielu godzinach frustracji zmieniłem plik web.config, aby dodać te moduły obsługi do system.webserver, aby działał:
źródło
Włącz CORS (ładny i schludny)
1.Dodaj pakiet CORS nuget
2. w pliku WebApiConfig.cs do metody Register dodaj poniższy kod:
np.
przy użyciu System.Web.Http;
3. Dodaj poniższy kod do przestrzeni nazw kontrolera, w tym get, post, delete, put lub dowolną metodę http
dawny:
źródło: http://www.asp.net/web-api/overview/security/eniring-cross-origin-requests-in-web-api
źródło
Gdy nic nie działało, udało mi się to rozwiązać, wykonując poniższe czynności:
• Nie wybrano ustawień IIS „WEB DAV PUBLISHING” podczas instalacji usług IIS. • INETMGR - Witryna domyślna - Filtrowanie żądań - Zlecenia HTTP - PUT jako prawda
źródło
Po niekończących się poszukiwaniach i próbowaniu już dostarczonych odpowiedzi (dodawanie czasowników PUT, DELETE i usuwanie WEBdav) po prostu nie zadziałało.
Poszedłem do ustawień rejestrowania IIS:> Wyświetl pliki dziennika. W moim przypadku W3SVC4 był folderem z najnowszą datą, otworzył folder, wyszukał najnowszy plik dziennika i zobaczył ten wpis: GET / Rejected-By-UrlScan ~ / MYDOMAIN / API / ApiName / UpdateMETHOD
Metoda aktualizacji została wymieniona z czasownikiem GET, dziwne, prawda? Więc wyszukałem w Google Odrzucenie przez UrlScan i znalazłem ten link: UrlScan zepsuł mój blog .
Udałem się tutaj:% windir% \ system32 \ inetsrv \ urlscan \ UrlScan.ini
Zasadniczo UrlScan zablokował czasowniki PUT i DELETE. Otworzyłem ten plik INI, dodałem PUT i DELETE do AllowVerbs i usunąłem je z list DenyVerbs. Zapisałem plik INI i zadziałało! Więc dla mnie te kroki były konieczne obok wskazówek ExtensionlessUrlHandler.
Windows Webserver 2008 R2 (64-bitowy), IIS 7.5. Używam tego w połączeniu z DotNetNuke (DNN) WebAPI. ASP.Net 4.0 Moja metoda aktualizacji:
źródło
W przypadku PHP było to po prostu:
Wyobrażam sobie, że to zadziała również z innymi przewodnikami.
źródło
Oprócz wszystkich powyższych rozwiązań sprawdź, czy masz " id " lub jakikolwiek niestandardowy parametr zdefiniowany w metodzie DELETE pasuje do konfiguracji trasy.
Jeśli trafisz z powtarzającymi się błędami 405, lepiej zresetuj podpis metody do domyślnej, jak powyżej, i spróbuj.
Konfiguracja trasy domyślnie będzie szukać identyfikatora w adresie URL. Więc identyfikator nazwy parametru jest tutaj ważny, chyba że zmienisz konfigurację trasy w App_Start folderze .
Możesz zmienić typ danych identyfikatora .
Na przykład poniższa metoda powinna działać dobrze:
Uwaga: upewnij się również, że przekazujesz dane przez adres URL, a nie metodę danych, która będzie przenosić ładunek jako treść.
Przykład:
Mam nadzieję, że to pomoże.
źródło
Miałem z tobą ten sam problem, a potem go rozwiązałem, oto rozwiązania, chciałbym, żeby to mogło pomóc
Po pierwsze
W
modules
konfiguracji usług IIS zapętl moduł WebDAVModule , jeśli Twój serwer sieciowy go ma, a następnie usuń godruga
W
handler mappings
konfiguracji IIS możesz zobaczyć listęthe PHP item
włączonych handlerów, aby wybrać , edytować, na stronie edycji kliknij przycisk ograniczenia żądania, a następnie wybierzthe verbs tab
w trybie modalnym, w określ etykietę czasowników do obsługi, zaznaczall verbs radio
, a następnie kliknij ok, możesz również zobaczyć ostrzeżenie, pokazuje nam, że używaj podwójnych cudzysłowów do wykonywania PHP-CGI, a następnie zrób tojeśli to zrobisz, uruchom ponownie serwer IIS, wszystko będzie dobrze
źródło
Nie jestem pewien, czy edytowałeś właściwy plik konfiguracyjny. Spróbuj wykonać następujące czynności
otwórz% userprofile% \ ducuments \ iisexpress \ config \ applicationhost.config
Domyślnie podane poniżej wpisy są komentowane w pliku applicationhost.config. odkomentuj te wpisy.
źródło
Oto jak zezwolić na dodatkowe zlecenia HTTP przy użyciu interfejsu GUI Menedżera usług IIS.
W Menedżerze usług IIS wybierz witrynę, dla której chcesz zezwolić na PUT lub DELETE.
Kliknij opcję „Poproś o filtrowanie”. Kliknij kartę „HTTP Verbs”.
Kliknij link „Zezwalaj na czasownik ...” na pasku bocznym.
W wyświetlonym polu wpisz „USUŃ”, kliknij OK.
Kliknij ponownie łącze „Zezwalaj na czasownik ...” na pasku bocznym.
W wyświetlonym polu wpisz „PUT”, kliknij OK.
źródło
Używam pliku ashx w aplikacji MVC i żadna z powyższych odpowiedzi nie zadziałała. IIS 10.
Oto, co zadziałało. Zamiast zmieniać „ ExtensionlessUrl-Integrated-4.0 ” w IIS lub web.config, zmieniłem „ SimpleHandlerFactory-Integrated-4.0 ” na pliki „ * .ashx ”:
źródło
Innym powodem może być:
Zmieniłem adres URL dla interfejsu API sieci Web zgodnie z tą odpowiedzią :
Ale ta metoda tworzy link taki jak:
Działa to poprawnie z żądaniami GET i POST, ale nie z PUT lub DELETE.
Więc po prostu zastąpiłem go:
i rozwiązało problem.
źródło
W usługach IIS 8.5 / Windows 2012R2 nic, co zostało tu wymienione, nie działało. Nie wiem, co oznacza usunięcie WebDAV, ale to nie rozwiązało problemu.
Pomogły mi poniższe kroki;
Teraz wszystko działa.
źródło
Możesz przekonwertować swoją metodę Delete na POST jako;
źródło