Napisałem usługę REST przy użyciu ASP.NET Web API. Próbuję wysłać żądanie HttpDelete, jednak pojawia się następujący błąd:
405 - Czasownik HTTP używany do uzyskania dostępu do tej strony jest niedozwolony
Myślę, że jestem blisko rozwiązania, dowiedziałem się, że powinienem włączyć zdalne zarządzanie IIS, przejść do sekcji Handler Mappings i dodać czasownik DELETE do odpowiedniej pozycji ... ale problem polega na tym, że jest wiele różnych pozycji na lista ... (coś jak tutaj: http://www.somacon.com/p126.php ).
Który powinienem edytować? Niewiele z nich nie ma rozszerzenia, np. "ExtensionUrlHandler-Integrated-4.0" i dodałem do niego czasownik DELETE, ale nadal nie działa ...
To był tylko strzał w ciemno, żeby to zmodyfikować, więc czy powinienem zmodyfikować inną pozycję? Jeśli tak, to jaki? A może jest coś więcej, co powinienem zrobić?
Ta sama usługa internetowa działa doskonale w mojej usłudze lokalnej, więc myślę, że problem dotyczy zdalnych usług IIS ...
Pozdrowienia
Odpowiedzi:
Typową przyczyną tego błędu jest WebDAV . Upewnij się, że go odinstalowałeś.
źródło
Nie musisz odinstalowywać WebDAV, po prostu dodaj następujące wiersze do pliku web.config:
źródło
Zmień plik Web.Config jak poniżej
źródło
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
Miałem ten problem i rozwiązałem:
Wybierz witrynę zaplecza
w widoku funkcji: otwórz Mapowanie obsługi
źródło
Jeśli żadne z powyższych rozwiązań nie rozwiązało problemu, tak jak w moim przypadku (nadal utknęło w moim module RestClient w obliczu 405), spróbuj zażądać swojego interfejsu API za pomocą narzędzia takiego jak Postman lub Fiddler. Chodzi mi o to, że problem może być gdzie indziej, jak źle sformatowane żądanie.
Odkryłem, że mój moduł RestClient prosił o 'Put' z nieprawidłowo sformatowanym parametrem Id:
zamiast
Przypadkowo, źle sformatowane żądanie zwraca 405 - metoda niedozwolona (IIS 7.5)
źródło
Niezbyt często, ale może niektórym pomóc.
Otrzymywaliśmy komunikat „Metoda niedozwolona” 405 w metodzie dekorowanej HttpPut.
Nasz problem wydaje się być rzadki, ponieważ przypadkowo użyliśmy [HttpPut] atrybutu z System.Web.Mvc, a nie System.Web.Http
Powodem jest to, że resharper zasugerował wersję .Mvc, gdzie - jak zwykle - odwołuje się do System.Web.Http, gdy wyprowadzasz bezpośrednio z ApiController, używaliśmy klasy rozszerzającej ApiController.
źródło
Zdarzyło mi się to (metoda 405 niedozwolona), gdy wywoływana przeze mnie metoda webowego interfejsu API miała prymitywne typy parametrów, zamiast typu złożonego, do którego uzyskiwany był dostęp z treści. Tak jak to:
To zadziałało:
To nie:
źródło
Ten błąd pochodzi z modułu obsługi staticfile - który domyślnie nie filtruje żadnych czasowników, ale prawdopodobnie radzi sobie tylko z HEAD i GET.
A to dlatego, że żaden inny przewodnik nie podszedł do talerza i nie powiedział, że poradzi sobie z DELETE.
Ponieważ używasz WEBAPI, które z powodu routingu nie ma plików, a tym samym rozszerzeń, do pliku web.config należy dodać następujące dodatki:
Oczywiście, co jest potrzebne zależy od trybu klasycznego vs trybu zintegrowanego, a tryb klasyczny zależy od bitowości. Ponadto nagłówek OPTIONS został dodany do przetwarzania CORS, ale jeśli nie wykonujesz CORS, nie potrzebujesz tego.
FYI, Twój plik web.config jest wersją lokalną aplikacji (lub katalogu aplikacji), której najwyższym poziomem jest applicationHost.config.
źródło
Jeśli jest to IIS 8.0, sprawdź, czy aktywacja HTTP jest włączona. Menedżer serwera -> IIS -> Zarządzaj (patrz prawy u góry) -> Dodaj role i funkcje -> ... -> przejdź do konfiguracji WCF, a następnie wybierz Aktywacja HTTP.
źródło
W naszym przypadku problem dotyczył logowania federacyjnego między witryną .Net a programem ADFS. Kiedy przekierowanie do ADFS punktem końcowym
wctx
parametrem potrzebne wszystkie trzy parametry dlaWSFederationAuthenticationModule.CreateSignInRequest
metody:rm
,id
, iru
Podziękowania dla Guillaume Raymond za wskazówkę dotyczącą sprawdzenia parametrów adresu URL!
źródło
Poza wszystkimi powyższymi rozwiązaniami, sprawdź, czy masz "
id
" lub jakikolwiek niestandardowy parametr zdefiniowany wDELETE
metodzie jest zgodny z konfiguracją 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ć
id
w adresie URL. Dlatego nazwa parametruid
jest tutaj ważna, chyba że zmienisz konfigurację trasy wApp_Start
folderze.Możesz zmienić typ danych
id
.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
Dodam dla tych, którzy utknęli podczas próby uruchomienia
PHP
(Laravel
w niektórych przypadkach) lub innej unikalnejIIS
sytuacji hostingu z405 error
, że musisz zmienićverbs
w programie obsługi dla tej konkretnej sytuacji ... więc odkąd korzystałemPHP
, poszedłem do programPHP
obsługi i na karcieRequest Restrictions
, a następnieVerbs
dodajverbs
potrzebne. To było wszystko, co potrzebne, aby dodać doweb.config
celu umożliwieniaCORS
wLaravel
.źródło
Żadne z powyższych nie działało dla mnie i miałem problemy z rozwiązywaniem problemów za pomocą strony pomocy technicznej ( https://support.microsoft.com/en-us/help/942051/error-message-when-a-user-visits-a-website -that-is-hosted-on-a-server), a następnie porównałem plik hosta aplikacji z jedną z kopii roboczych i wygląda na to, że brakowało mi kilku programów obsługi, a kiedy dodałem je z powrotem do hosta aplikacji, zaczęło działać. Brakowało mi tego wszystkiego,
źródło