Używam WebClient
typu do przesyłania plików * .cab na mój serwer. Po stronie serwera zarejestrowałem obsługę HTTP dla pliku * .cab metodą PUT jak poniżej:
<add name="ResultHandler" path="*.cab" verb="PUT" type="FileUploadApplication.ResultHandler" resourceType="Unspecified" requireAccess="Script" preCondition="integratedMode" />
Ale zawsze pojawia się błąd „405 metoda niedozwolona”. W odpowiedzi stwierdzono, że dozwolone metody są następujące:
Headers = {Allow: GET, HEAD, OPTIONS, TRACE
Content-Length: 1293
Content-Type: text/html
Date: Fri, 27 May 2011 02:08:18 GMT
Server: Microsoft-IIS/7.5
X-Powered-By: ASP.NET}
Nawet jeśli wyraźnie zezwalam na metodę PUT w filtrowaniu żądań usług IIS dla mojej aplikacji sieci Web, nadal występuje ten sam błąd.
Podejrzewam, że jest to problem związany z usługami IIS. Mam nadzieję, że ktoś mógłby rzucić na to trochę światła.
Włączyłem śledzenie nieudanych żądań i otrzymałem następujące informacje:
Więc odinstalowałem moduł WebDAVModule z moich usług IIS, teraz wszystko jest w porządku ~
Funkcja śledzenia usług IIS jest bardzo pomocna.
źródło
Application_BeginRequest
metodzie, jak wspomniano w tej odpowiedzi stackoverflow.com/a/14631068/827168 . Ale twoja odpowiedź jest lepsza niż wszystkie inne, ponieważ pomaga wykryć problem zamiast zastosować jakąś losową łatkę :)Handler "WebDAV" has a bad module "WebDAVModule" in its module list
.Miałem ten problem z WebDAV podczas hostowania projektu MVC4 WebApi. Obejrzałem to, dodając tę linię do pliku web.config:
Jak wyjaśniono tutaj: http://evolutionarydeveloper.blogspot.co.uk/2012/07/method-not-allowed-405-on-iis7-website.html
źródło
Zaczerpnięte stąd i zadziałało dla mnie:
1 Przejdź do Menedżera usług IIS.
2. Kliknij swoją aplikację.
3. Przejdź do „Mapowania obsługi”.
4. Na liście funkcji kliknij dwukrotnie „WebDAV”.
5. Kliknij „Request Restrictions”.
6. W zakładce „Czasowniki” wybierz „Wszystkie czasowniki”.
7. naciśnij OK.
źródło
Wypróbowałem większość odpowiedzi i niestety żadna z nich nie zadziałała.
Oto, co zadziałało dla mnie. Istnieją 3 rzeczy do zrobienia w witrynie, dla której chcesz PUT (wybierz witrynę):
Otwórz,
WebDav Authoring Rules
a następnie wybierzDisable WebDAV
opcję obecną na prawym pasku.Wybierz
Modules
, znajdźWebDAV Module
i usuń.Wybierz
HandlerMapping
, znajdźWebDAVHandler
i usuń.Uruchom ponownie usługi IIS.
źródło
PUT
zacząłem pracować.Usunięcie modułu WebDAV powinno wystarczyć. Po prostu zmień swój plik Web.config:
źródło
Najlepiej po prostu usunąć nieużywaną funkcję WebDAV. Przejdź do Programy i funkcje => Włącz lub wyłącz funkcje systemu Windows i wyłącz publikowanie WebDAV pod
Internetowe usługi informacyjne => World Wide Web Services => Wspólne funkcje HTTP
źródło
Z jakiegoś powodu oznaczenie WebDAVModule jako „usuń” w moim pliku web.config nie wystarczyło, aby rozwiązać problem w moim przypadku.
Znalazłem innego podejścia, które nie rozwiąże problemu. Jeśli jesteś na tej samej łodzi, spróbuj tego:
Zapobiega to odrzucaniu przez WebDAV czasowników, których nie obsługuje, umożliwiając w ten sposób przepływ PUT do programu obsługi RESTful bez przeszkód.
źródło
Kolejna wskazówka ode mnie. Użyłem PHP + IIS, a mapowanie obsługi dla PHP nie miało czasownika PUT.
Idź do IIS Manager-> Your site-> Handler Mappings-> PHPxx_via_FastCGI-> Request Restrictions-> Verbs, a następnie dodaj PUT.
Otóż to!
źródło
Kolejnym ważnym modułem, który wymaga rekonfiguracji, zanim zaczną działać PUT i DELETE, jest czasownik opcji
Zobacz także ten post: https://stackoverflow.com/a/22018750/9376681
źródło
Miałem te same problemy z PUT, PATCH i DELETE, ale nie miałem nic z zainstalowanym WebDav. Rozwiązanie 1 w tym artykule w końcu mi pomogło: http://support.microsoft.com/kb/942051
źródło
Używałem Angular 8 i miałem .NET core API. Dodaję następujący plik w moim pliku web.config usługi. To rozwiązuje mój błąd.
źródło
Dla mnie ten błąd nie zniknął i nie pozwolił na metody PUT, cokolwiek zrobiłem .. odinstalowałem webdav, umieściłem konfigurację w web.config, aby usunąć webdav z modułów obsługi i modułów, i ustawiłem PUT jako dozwolony czasownik w filtrach żądań w iis .. i upewnij się, że mapowania programu obsługi iis obsługujące żądanie mają skonfigurowane PUT.
Mój problem był ostatecznie spowodowany złą instalacją rozszerzeń ASP.NET 4.5. Usunięto wszystko, co dotyczy asp.net, z ról i funkcji serwera. uruchomiony ponownie. przeczytałem role i uruchomiłem ponownie. wszystko działało z powyższą konfiguracją.
--- Poniższe informacje spowodują akceptację PUT, ale wyślą je do niewłaściwego programu obsługi. - zignoruj poniższe
na koniec dodanie czasownika PUT jako dozwolonego czasownika w mapowaniu obsługi TRACE w iis działało .. ponieważ włączyłem śledzenie błędów zakończonych niepowodzeniem, a ten czasownik nie zezwalał na czasownik.
Ostatnim razem, gdy miałem ten sam problem w usługach IIS innego serwera, wynikało to z braku znaku „/” na końcu adresu URL, ponieważ prawdopodobnie korzystał z domyślnego programu obsługi bez użycia domyślnego dokumentu, a teraz zdaję sobie z tego sprawę ... więc sprawdź IIS mapowania obsługi, jeśli nic innego nie pomoże.
źródło
Miałem ten problem, ale nie było nic związanego z WebDAV. W moim przypadku klient wysyłał POST do www.myServer.com/api/chart. To wywołanie powinno być obsługiwane przez „ExtensionlessUrlHanlder-Integrated-4.0”, jednak w jakiś sposób lokalna struktura plików została utworzona w katalogu mojego serwera „... \ Server \ api \ chart \”. Oznaczało to, że zamiast tego wywoływano procedurę obsługi „StaticFile”. Usunięcie tych plików lokalnych ostatecznie rozwiązało problem.
źródło
Oto, co zadziałało dla mnie:
Otwórz IIS i kliknij swoją witrynę.
1 - Double Click on the Modules 2 - Right Click on WebDavPublishing and remove. 3 - Restart running WebSite.
źródło
W przypadku serwera Windows 2012 -> Przejdź do Menedżera serwera -> Usuń role i funkcje -> Role serwera -> Serwer sieci Web (IIS) -> Serwer sieci Web -> Typowe funkcje HTTP -> Odznacz publikowanie WebDAV i usuń -> Uruchom ponownie serwer.
źródło
Jeśli pula aplikacji usług IIS działa w trybie klasycznym, upewnij się, że plik web.config zawiera następujące elementy
źródło
W moim przypadku przeniosłem Web Deploy na inny port, który był również portem IIS (nie 80). Na początku nie zdawałem sobie sprawy, ale mimo że nie było błędów działających na obu na tym samym porcie, wydaje się, że Web Deploy najprawdopodobniej z jakiegoś powodu odpowiadało jako pierwsze zamiast usług IIS, powodując ten błąd. Właśnie przeniosłem moje powiązanie IIS do innego portu i wszystko jest w porządku. ;)
źródło
Aby w ogóle uniemożliwić włączenie WebDav, usuń następujący wpis z ApplicationHost.config:
<add name="WebDAVModule" />
Wpis znajduje się w sekcji modułów.
Dokładna lokalizacja konfiguracji:
C:\Windows\System32\inetsrv\config\applicationHost.config
źródło
Miałem ten sam problem, z RESTful API działającym na rdzeniu aspnet.
Nie chciałem odinstalować WebDAV i wypróbowałem większość opisanych powyżej środków zaradczych. Próbowałem ustawić czasowniki = "*" zarówno na stronie, jak i na samym serwerze, ale bez powodzenia.
Jaka sztuczka była dla mnie następująca:
Menedżer usług IIS -> Witryny -> MySite -> HandlerMappings -> aspNetCore -> Edytuj
-> Żądaj ograniczeń -> Dostęp -> Brak (to był skrypt).
Potem wszystko działało, nawet jeśli wymieniłem oryginalne opcje WebDAV.
źródło