Doceniam każdą pomoc w tej sprawie, ponieważ strona ma zostać uruchomiona dziś wieczorem!
Mam kontroler interfejsu API sieci Web z metodą usuwania. Metoda działa dobrze na moim komputerze lokalnym z uruchomionym IIS Express (Windows 8), ale gdy tylko wdrożyłem ją na aktywnym serwerze IIS (Windows Server 2008 R2), przestała działać i wyświetla następujący komunikat o błędzie:
Błąd HTTP 405.0 - metoda niedozwolona Strona, której szukasz, nie może zostać wyświetlona, ponieważ używana jest nieprawidłowa metoda (zlecenie HTTP)
Rozejrzałem się po sieci w poszukiwaniu rozwiązań i wdrożyłem najbardziej rozsądne. Moja konfiguracja internetowa ma następujące ustawienia:
<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<handlers>
<remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
<remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
<remove name="ExtensionlessUrlHandler-Integrated-4.0" />
<add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
<add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>
</system.webServer>
Próbowałem również zmienić mapowania obsługi i filtrowanie żądań w usługach IIS bezskutecznie. Należy pamiętać, że wydaje się, że reguły tworzenia WebDAV w usługach IIS są wyłączone.
Wszelkie pomysły będą mile widziane. Dzięki.
W niektórych przypadkach usunięcie go tylko z modułów może spowodować następny błąd:
zaproponowano tutaj rozwiązanie . Należy również usunąć go z obsługi.
źródło
W moim przypadku żadne z powyższych rozwiązań nie działało. To dlatego, że zmieniłem nazwę parametru w mojej
Delete
metodzie.miałem
zamiast
Muszę użyć tej
id
nazwy, ponieważ jest to nazwa zadeklarowana w moimWebApiConfig
pliku. Zwróć uwagę naid
nazwę w trzecim i czwartym wierszu:Mam to rozwiązanie stąd .
źródło
DELETE
Czasownik JavaScript dla HTTP musi wyglądać następująco:Czy nie używać coś takiego:
tak jak podczas korzystania z
POST
metody.źródło
Po wypróbowaniu prawie wszystkich rozwiązań tutaj zadziałało. Dodaj to do pliku konfiguracyjnego interfejsów API
źródło
Jeśli używasz usług IIS 7.0 lub nowszej wersji. Ten problem dotyczy głównie modułu rozszerzenia WebDAV na serwerze IIS. stało się to podczas korzystania z akcji Opublikuj LUB usuń.
Spróbuj poniższych ustawień w konfiguracji sieciowej
źródło
Miałem też ten sam problem, dzwonię do WebAPi i otrzymuję ten błąd. Dodanie następującej konfiguracji w web.config dla usług rozwiązało mój problem
w pliku web.config rozwiązało mój problem. Oto jak dzwoniłem po stronie klienta
źródło
Przejdź do pliku applicationHost.config (zwykle w C: \ Windows \ System32 \ inetsrv \ config) i zakomentuj następujący wiersz w pliku applicationHost.config
1) Pod <handlers>:
2) Skomentuj również następujący moduł, do którego odwołuje się powyższy program obsługi w ramach <modules>
źródło
W moim przypadku przegapiłem dodanie
{id}
do[Route("")]
i otrzymałem ten sam błąd. Dodanie tego rozwiązało problem:[Route("{id}")]
źródło
Wystąpił błąd 405 Metoda niedozwolona, ponieważ pominąłem publiczne udostępnienie metody Delete na kontrolerze WebApi.
Znalezienie tego zajęło mi dużo czasu (zbyt długo!), Ponieważ spodziewałbym się w tym przypadku błędu Nie znaleziono, więc błędnie założyłem, że moja metoda Delete została odrzucona.
Powodem niedozwolonego zamiast nie znalezionego jest to, że miałem również metodę Get dla tej samej trasy (co będzie normalnym przypadkiem podczas implementowania REST). Publiczna funkcja Get jest dopasowywana przez routing, a następnie odrzucana z powodu niewłaściwej metody http.
Prosty błąd, który znam, ale może zaoszczędzić trochę czasu komuś innemu.
źródło
Wystarczy dodać. Jeśli to jest twoja konfiguracja
proszę, rób dalej tak, jak powiedział Hugo i nie ustawiaj atrybutu Route na metodę get kontrolera, to spowodowało problem w moim przypadku.
źródło
Miałem podobny problem, ale dla PUT - żadna z innych sugestii nie zadziałała.
Jednak używałem
int
zamiast domyślnegostring
identyfikatora. dodanie{id:int}
do trasy rozwiązało mój problem.źródło
Musieliśmy dodać niestandardowe nagłówki do naszego pliku web.config, ponieważ nasze żądanie zawierało wiele nagłówków, które myliły odpowiedź interfejsu API.
źródło
Atrybut [HttpPost] w górnej części metody Delete rozwiązał ten problem:
źródło
data
(tj. Treści żądania) zamiastparams
(tj. Adresu URL żądania) po stronie klienta.