"PUT" yöntemi için IIS7.5'te "405 yöntemine izin verilmiyor"


113

WebClient* .Cab dosyalarını sunucuma yüklemek için type kullanıyorum . Sunucu tarafında, aşağıdaki gibi PUT yöntemiyle * .cab dosyası için bir HTTP işleyicisi kaydettim:

 <add name="ResultHandler" path="*.cab" verb="PUT" type="FileUploadApplication.ResultHandler" resourceType="Unspecified" requireAccess="Script" preCondition="integratedMode" />

Ancak her zaman "405 yöntemine izin verilmiyor" hatası alıyorum. Yanıt, izin verilen yöntemlerin aşağıdaki gibi olduğunu söyledi:

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}

Web uygulamam için IIS İstek Filtreleme'de PUT yöntemine açıkça izin versem bile aynı hata oluşmaya devam ediyor.

Bunun IIS ile ilgili bir sorun olduğundan şüpheleniyorum. Birinin benim için buna biraz ışık tutmasını umuyorum.

Yanıtlar:


214

Genellikle bu hata, bu tür istekleri işlemeye çalışan WebDAV modülünden kaynaklanır. Kolay bir çözüm, onu modüllerden ve system.webServerweb.config dosyanızın hemen içindeki bölümün işleyicilerinden kaldırmaktır . İşte bir yapılandırma örneği:

<system.webServer>
    <modules>
        <remove name="WebDAVModule" />
    </modules>
    <handlers>
        <remove name="WebDAV" />
    </handlers>
</system.webServer>

2
Aşağıdaki MS makalesini kullanarak, eylemcilere kaldırma etiketini ekledim, ancak yine de çalışmadı. Cevabınız sayesinde görüyorum ki onu modüller bölümüne eklemem gerekiyor. Çok minnettarım. İşte makale: asp.net/web-api/overview/testing-and-debugging/…
Tod Birdsall

Harika, beni saatler süren acı verici hata ayıklamalardan kurtardın! :)
Kaspars Ozols

Basit ve kolay düzeltme, Teşekkürler!
MorenajeRD

Bunu denedim ama benim için çalışmıyor. Hala 405 hatası alıyorum - Yönteme izin verilmiyor. IIS Express kullanıyorum ve hatanın bir şekilde yalnızca PUT'ta oluştuğunu, ancak GET, POST VE DELETE için çalıştığını unutmayın.
Thierry

47

Başarısız İstek İzleme özelliğini etkinleştirdim ve aşağıdaki bilgileri aldım:

 <EventData>
  <Data Name="ContextId">{00000000-0000-0000-0F00-0080000000FA}</Data>
  <Data Name="ModuleName">WebDAVModule</Data>
  <Data Name="Notification">16</Data>
  <Data Name="HttpStatus">405</Data>
  <Data Name="HttpReason">Method Not Allowed</Data>
  <Data Name="HttpSubStatus">0</Data>
  <Data Name="ErrorCode">0</Data>
  <Data Name="ConfigExceptionInfo"></Data>
 </EventData>

Bu yüzden, WebDAVModülünü IIS'imden kaldırdım, şimdi her şey yolunda ~

IIS izleme özelliği çok faydalıdır.


1
Cevabınız için teşekkürler ! 2 günlük araştırmadan sonra, "405 Yönteme İzin Verilmiyor" dan kaçınmak için bulduğum tek çalışan çözüm Application_BeginRequest, bu yanıtta stackoverflow.com/a/14631068/827168 belirtildiği gibi yöntemdeki CORS başlıklarını tanımlamaktı . Ancak cevabınız diğerlerinden daha iyi çünkü rastgele bir yama uygulamak yerine sorunu tespit etmeye yardımcı oluyor :)
pomeh

@pomeh Her zaman mantığı tamamlamaya inanıyorum. :)
smwikipedia


1
Ayrıca, İşleyici Eşleştirmelerine gitmeli ve WebDAV'ı oradan silmelisiniz, aksi takdirde hata mesajını alırsınız Handler "WebDAV" has a bad module "WebDAVModule" in its module list.
pipedreambomb

26

MVC4 WebApi Projesi barındırırken WebDAV ile bu sorunu yaşadım. Bu satırı web.config'e ekleyerek aştım:

<handlers>
  <remove name="WebDAV" />
  <add name="WebDAV" path="*" verb="*" modules="WebDAVModule"
      resourceType="Unspecified" requireAccess="None" />
</handlers>

Burada açıklandığı gibi: http://evolutionarydeveloper.blogspot.co.uk/2012/07/method-not-allowed-405-on-iis7-website.html


Gerçekten WebDAV'a ihtiyaç duyan biri için en iyi çözüm. Herkesin WebDAV'a ihtiyacı olup olmadığı ayrı bir tartışmadır.
MrBoJangles

24

Buradan alındı ve benim için çalıştı:

1. IIS Yöneticisine gidin.

2. Uygulamanıza tıklayın.

3. "İşleyici Eşlemeleri" ne gidin.

4. Özellik listesinde "WebDAV" üzerine çift tıklayın.

5. "Kısıtlama İste" ye tıklayın.

6. "Fiiller" sekmesinde "Tüm fiiller" i seçin.

7. Tamam'a basın.


3
Bu bana yardımcı oldu, ancak deneyimlerimle açıklığa kavuşturacağım. 2. (Web Hizmeti) uygulaması. 3. Orta paneldeki İşleyici Eşlemeleri simgesine çift tıklayın.
Gary

19

Cevapların çoğunu denedim ve maalesef hiçbiri tamamlanmadı.

İşte benim için işe yarayan şey. PUT yapmak istediğiniz sitede yapmanız gereken 3 şey vardır (siteyi seçin):

  1. Açın WebDav Authoring Rulesve ardından Disable WebDAVsağ çubukta bulunan seçeneği seçin .

  2. Seçin Modules, bulun WebDAV Moduleve kaldırın.

  3. Seçin HandlerMapping, bulun WebDAVHandlerve kaldırın.

IIS'yi yeniden başlatın.


Bu çalışıyor! Tüm 3 adımın web.config dosyası düzenlenerek gerçekleştirilip gerçekleştirilemeyeceğini bilmiyorum, ancak bu yalnızca IIS Yönetim Konsolu'nu kullanmayı kolaylaştırdı. WebDAV * ile başlayan 3 HandlerMapping girişi olduğunu unutmayın - 3'ünü de kaldırdım ve hayat güzeldi.
SlimsGhost

1
WebDav'ı kaldırmayı denedim ve işe yaramadı. Sonra yukarıdaki üç adımı da takip ettim ve PUTçalışmaya başladım.
rareyesdev

1
Adım 2 ve 3, sitenin geri kalanını etkilemeden bir sanal dizine uygulanabilir.
Tonatio

1
Çok teşekkürler. beni kurtardın. 7 saatlik hayal kırıklığından sonra, elimden gelen tüm cevabı denedim ve sonunda cevabınız bana çarptı. :)
Zeeshan Safdar

1
Teşekkürler, işte bu.
Ahmad Hamdy

17

WebDAV modülünü çıkarmak yeterli olmalıdır. Web.config'inizi değiştirin:

<system.webServer>
    <modules runAllManagedModulesForAllRequests="true">
        <remove name="WebDAVModule" />

14

Kullanılmayan WebDAV özelliğini kaldırmak en iyisidir. Git Programlar ve Özellikler => , Windows Açık veya Kapalı Özellikleri çevirin ve devre dışı WebDAV Yayıncılık altında

İnternet Bilgi Servisleri => World Wide Web Servisleri => Ortak HTTP Özellikleri

görüntü açıklamasını buraya girin


Teşekkürler ! Bu, sorunumu tamamen çözdü!
wmehanna

4

Her ne sebeple olursa olsun, web.config dosyamda WebDAVModule'ü "kaldır" olarak işaretlemek benim durumumdaki sorunu çözmek için yeterli değildi.

Başka bir yaklaşım buldum vermedi sorunu çözmek. Aynı teknedeyseniz, şunu deneyin:

  1. IIS Yöneticisi'nde, PUT'yi desteklemesi gereken uygulamayı seçin.
  2. Özellikler Görünümünde WebDAV Yazma Kurallarını bulun . Bunu çift tıklayın veya içerik menüsünden Unsuru Aç'ı seçin (sağ tıklayın).
  3. Eylemler bölmesinde WebDAV Ayarları ... öğesini bulun ve tıklayın .
  4. WebDAV Ayarlarında, İstek Filtreleme Davranışı'nı bulun ve bunun altında Fiil Filtrelemeye İzin Ver'i bulun . Set Fiil Filtreleme İzin için False .
  5. Eylemler bölmesinde Uygula'ya tıklayın .

Bu, WebDAV'ın desteklemediği fiilleri reddetmesini engeller ve böylece bir PUT'nin rahatsız edilmeden RESTful işleyicinize akmasına izin verir.


4

Benden başka bir ipucu. PHP + IIS kullandım ve PHP için İşleyici Eşleştirmelerinde PUT fiili yoktu.

IIS Yöneticisi-> Siteniz-> İşleyici Eşlemeleri-> PHPxx_via_FastCGI-> Kısıtlama İste-> Fiiller'e gidin, ardından PUT ekleyin.

Bu kadar!


1
Bu php kullanıcılarının ihtiyaç duyduğu cevaptır.
SpeedOfRound

4

PUT ve DELETE'in çalışmasından önce yeniden yapılandırılması gereken bir diğer önemli modül, seçenekler fiili

<modules>
<remove name="WebDAVModule" />
</modules>
<handlers>
<remove name="OPTIONSVerbHandler" />
<remove name="WebDAV" />
<add name="OPTIONSVerbHandler" path="*" verb="*" modules="ProtocolSupportModule" resourceType="Unspecified" requireAccess="Script" />
</handlers>

Ayrıca şu gönderiye bakın: https://stackoverflow.com/a/22018750/9376681



3

Angular 8 kullanıyordum ve .NET core API kullanıyordum. Aşağıdakileri servis web.config dosyama ekliyorum. Bu benim hatamı çözer.

<system.webServer>
  <modules runAllManagedModulesForAllRequests="false">
    <remove name="WebDAVModule" />
  </modules>
</system.webServer>

2

Benim için bu hata ortadan kalkmaz ve ne yaparsam yapayım PUT yöntemlerine izin vermez .. webdav'ı kaldırır, webdav'ı işleyicilerden ve modüllerden kaldırmak için web.config'e yapılandırma koyun ve iis'deki istek filtrelerinde izin verilen bir fiil olarak PUT'u ayarlayın .. ve isteği işleyen iis işleyici eşlemelerinin PUT yapılandırılmış olduğundan emin olun ..

Benim sorunum sonunda ASP.NET 4.5 Uzantılarının kötü yüklemesinden kaynaklanıyordu. Asp.net ile ilgili her şey sunucu rollerinden ve özelliklerinden kaldırıldı. yeniden. rolleri okudu ve yeniden başlatıldı. her şey yukarıdaki yapılandırma ile çalıştı.

--- Aşağıdakiler PUT'u kabul ettirecek, ancak yanlış işleyiciye gönderecektir. Aşağıdakileri dikkate alın

son olarak, iis üzerindeki TRACE işleyici eşlemesine izin verilen fiil olarak PUT fiilinin eklenmesi işe yaradı .. çünkü başarısız hata izlemeyi etkinleştirmiştim ve bu fiil fiile izin vermiyordu.

En son başka bir sunucunun IIS'sinde aynı sorunu yaşadığımda, muhtemelen varsayılan belgeyi kullanmadan varsayılan bir işleyici kullanması nedeniyle URL'nin sonunda bir "/" eksikliğinden kaynaklanıyordu ve şimdi bunun farkındayım .. bu yüzden IIS'yi kontrol edin başka hiçbir şey yardımcı olmazsa işleyici eşlemeleri.


2

Bu sorunu yaşadım ancak WebDAV ile ilgili hiçbir şey sorun olmadı. Benim durumumda, müşteri www.myServer.com/api/chart adresine bir POST gönderiyordu. Bu çağrı "ExtensionlessUrlHanlder-Integrated-4.0" tarafından ele alınmalıdır, ancak, bir şekilde sunucu dizinimde "... \ Server \ api \ chart \" yerel bir dosya yapısı oluşturuldu. Bu, bunun yerine "StaticFile" işleyicisinin çağrıldığı anlamına geliyordu. Bu yerel dosyaları silmek nihayet sorunu çözdü.


2

İşte benim için işe yarayan şey:

IIS'yi açın ve Sitenize tıklayın.

1 - Double Click on the Modules 2 - Right Click on WebDavPublishing and remove. 3 - Restart running WebSite.


1

Windows server 2012 için -> Sunucu yöneticisine gidin -> Rolleri ve Özellikleri Kaldır -> Sunucu Rolleri -> Web Sunucusu (IIS) -> Web Sunucusu -> Ortak HTTP Özellikleri -> WebDAV Yayını'nın işaretini kaldırın ve kaldırın -> Sunucuyu yeniden başlatın.


0

IIS uygulama havuzu klasik modda çalışıyorsa, web.config dosyanızda aşağıdakilere sahip olduğunuzdan emin olun

<remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />

    <add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE" modules="IsapiModule" scriptProcessor="c:\Windows\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" />

0

Benim durumumda, Web Deploy'u aynı zamanda IIS bağlantı noktası olan (80 değil) başka bir bağlantı noktasına taşıdım. İlk başta fark etmedim, ancak her ikisini de aynı bağlantı noktası altında çalıştıran hiçbir hata olmamasına rağmen, Web Dağıtımı büyük olasılıkla IIS yerine ilk yanıt veriyordu ve bu hataya neden oluyordu. IIS bağlamamı başka bir bağlantı noktasına taşıdım ve her şey yolunda. ;)


0

WebDav'ın hiç etkinleştirilmesini önlemek için, ApplicationHost.config dosyasından aşağıdaki girişi kaldırın: <add name="WebDAVModule" />

Giriş modüller bölümünde yer almaktadır.

Yapılandırmanın tam konumu: C:\Windows\System32\inetsrv\config\applicationHost.config


0

Aspnet çekirdeğinde çalışan bir RESTful API ile aynı sorunu yaşadım.

WebDAV'ı kaldırmak istemedim ve yukarıda açıklanan çözümlerin çoğunu denedim. Fiilleri hem sitede hem de sunucunun kendisinde = "*" ayarlamaya çalıştım, ancak başarılı olamadım.

Benim için püf noktası şuydu:

IIS Yöneticisi -> Siteler -> Sitem -> İşleyici Eşlemeleri -> aspNetCore -> Düzenle

-> Kısıtlama İste -> Erişim -> Yok (Komut Dosyaydı).

Bundan sonra, orijinal WebDAV seçeneklerini değiştirsem bile her şey çalıştı.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.