"PUT" विधि के लिए IIS7.5 में "405 विधि की अनुमति नहीं है"


113

मैं WebClientअपने सर्वर पर * .abab फाइल अपलोड करने के लिए टाइप का उपयोग करता हूं। सर्वर की ओर, मैंने नीचे के रूप में PUT पद्धति के साथ * .cab फ़ाइल के लिए एक HTTP हैंडलर पंजीकृत किया है:

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

लेकिन मुझे हमेशा "405 पद्धति की अनुमति नहीं है" त्रुटि मिलती है। प्रतिक्रिया में कहा गया है कि अनुमत तरीके निम्न हैं:

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}

यहां तक ​​कि अगर मैं अपने वेब एप्लिकेशन के लिए IIS अनुरोध फ़िल्टरिंग में स्पष्ट रूप से PUT विधि की अनुमति देता हूं, तो भी वही त्रुटि होती है।

मुझे संदेह है कि यह एक IIS से संबंधित मुद्दा है। मुझे उम्मीद है कि कोई मेरे लिए इस पर कुछ प्रकाश डाल सकता है।

जवाबों:


214

अक्सर यह त्रुटि WebDAV मॉड्यूल के कारण होती है जो इस तरह के अनुरोधों को संभालने का प्रयास करती है। एक आसान समाधान यह है कि इसे system.webServerअपने web.config फ़ाइल के अंदर मॉड्यूल और अनुभाग के हैंडलर्स से हटा दें । यहाँ एक विन्यास उदाहरण है:

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

2
निम्नलिखित एमएस लेख का उपयोग करते हुए, मैंने हटाए गए टैग को हैंडलर में जोड़ा, लेकिन यह अभी भी काम नहीं किया। आपके उत्तर के लिए धन्यवाद मुझे लगता है कि मुझे इसे मॉड्यूल अनुभाग में जोड़ने की भी आवश्यकता थी। बहुत सराहना की। यहाँ लेख है: asp.net/web-api/overview/testing-and-debugging/…
Tod Birdsall

महान, आपने मुझे दर्दनाक डिबगिंग के घंटे बचाए! :)
कास्पर्स ओज़ोल्स 14

सरल और आसान फिक्स, धन्यवाद!
मोरेनाजेआरडी

मैंने कोशिश की है, लेकिन मेरे लिए काम नहीं करता है। मुझे अभी भी त्रुटि 405 मिल रही है - विधि की अनुमति नहीं है। ध्यान दें कि मैं IIS एक्सप्रेस का उपयोग कर रहा हूं और त्रुटि किसी तरह केवल PUT पर होती है लेकिन GET, POST और DELETE के लिए काम करती है।
थियरी

46

मैंने असफल अनुरोध अनुरेखण सक्षम किया, और निम्नलिखित जानकारी मिली:

 <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>

इसलिए, मैंने अपने IIS से WebDAVModule की स्थापना रद्द कर दी है, अब सब कुछ ठीक है ~

IIS अनुरेखण सुविधा बहुत मददगार है।


1
आपके उत्तर के लिए धन्यवाद ! 2 दिनों के शोध के बाद, मैंने "405 मेथड नॉट अलाउड" से बचने के लिए एकमात्र कार्यशील समाधान विधि में कॉर्स हेडर्स को परिभाषित किया Application_BeginRequest, जैसा कि इस उत्तर में बताया गया है stackoverflow.com/a/14631068/827168 । लेकिन आपका जवाब अन्य सभी की तुलना में बेहतर है क्योंकि यह कुछ यादृच्छिक पैच लगाने के बजाय समस्या को हल करने में मदद करता है :)
pomeh

@pomeh मैं हमेशा तर्क को पूर्ण बनाने में विश्वास करता हूं। :)
smwikipedia


1
ध्यान दें, आपको हैंडलर मैपिंग में भी जाना चाहिए और वहां से WebDAV को हटाना चाहिए, अन्यथा आपको त्रुटि संदेश मिलेगा Handler "WebDAV" has a bad module "WebDAVModule" in its module list
पाइपड्रीमबॉम्ब

26

मुझे MVC4 WebApi प्रोजेक्ट की मेजबानी करते समय WebDAV के साथ यह समस्या थी। मैं इस लाइन को web.config में जोड़कर इसके चारों ओर हो गया:

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

जैसा कि यहाँ बताया गया है: http://evolutionarydeveloper.blogspot.co.uk/2012/07/method-not-allowed-405-on-iis7-website.html


किसी के लिए सबसे अच्छा समाधान जो वास्तव में WebDAV की आवश्यकता है। क्या किसी को भी WebDAV की अलग चर्चा की जरूरत है।
MrBoJangles

24

यहाँ से लिया और यह मेरे लिए काम किया:

1.Go to IIS मैनेजर।

2. अपने ऐप पर क्लिक करें।

3.Go को "हैंडलर मैपिंग"।

4. फीचर सूची में, "WebDAV" पर डबल क्लिक करें।

5. "अनुरोध प्रतिबंध" पर क्लिक करें।

6. टैब में "क्रिया" "सभी क्रियाओं" का चयन करें।

7. ठीक है।


3
इससे मुझे मदद मिली, लेकिन मैं अपने अनुभव से स्पष्ट करूंगा। 2. (वेब ​​सेवा) ऐप। 3. सेंटर पैनल में हैंडलर मैपिंग आइकन पर डबल क्लिक करें।
गैरी

19

मैंने अधिकांश उत्तरों की कोशिश की और दुर्भाग्य से, उनमें से कोई भी पूरा होने में काम नहीं आया।

यहाँ मेरे लिए क्या काम किया है। उस साइट पर करने के लिए 3 चीज़ें हैं जिन्हें आप PUT चाहते हैं (साइट का चयन करें):

  1. ओपन करें WebDav Authoring Rulesऔर फिर Disable WebDAVराइट बार पर मौजूद विकल्प चुनें ।

  2. चुनें Modules, ढूंढें WebDAV Moduleऔर इसे हटा दें।

  3. चुनें HandlerMapping, ढूंढें WebDAVHandlerऔर इसे हटा दें।

IIS को पुनरारंभ करें।


यह काम! सभी 3 चरणों web.config फ़ाइल को संपादित करके किया जा सकता है पता नहीं है, लेकिन यह केवल IIS प्रबंधन कंसोल का उपयोग कर आसान बना दिया। बस ध्यान दें कि WebDAV * से शुरू होने वाली 3 हैंडलर मैपिंग प्रविष्टियाँ हैं - मैंने सभी 3 को हटा दिया और जीवन अच्छा था।
स्लिम्सगॉस्ट

1
मैंने WebDav की स्थापना रद्द करने की कोशिश की और काम नहीं किया। फिर मैंने ऊपर के सभी तीन चरणों का पालन किया और PUTकाम करना शुरू कर दिया।
दुर्लभदेव महादेव

1
चरण 2 और 3 साइट के बाकी हिस्सों को प्रभावित किए बिना एक आभासी निर्देशिका में लागू किया जा सकता है।
टन अनुपात

1
बहुत बहुत धन्यवाद। तुमने मुझे बचाया। 7 घंटे की हताशा के बाद, सभी जवाब देने की कोशिश की कि मैं कर सकता था और आखिरकार आपके जवाब ने मुझे मारा। :)
जीशान सफदर

1
धन्यवाद, यह बात है।
अहमद हमी

17

WebDAV- मॉड्यूल को निकालना पर्याप्त होना चाहिए। बस अपना Web.config बदलें:

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

14

सबसे अच्छा केवल अप्रयुक्त WebDAV सुविधा को हटाने के लिए। प्रोग्राम्स और फीचर्स पर जाएं => विंडोज फीचर्स को चालू या बंद करें और इसके तहत WebDAV प्रकाशन को अक्षम करें

इंटरनेट सूचना सेवाएँ => वर्ल्ड वाइड वेब सेवाएँ => सामान्य HTTP सुविधाएँ

यहां छवि विवरण दर्ज करें


धन्यवाद ! यह पूरी तरह से मेरा मुद्दा तय हो गया!
वामनना

4

जो भी कारण के लिए, WebDAVModule को मेरे web.config में "हटाएं" के रूप में चिह्नित करना मेरे मामले में समस्या को ठीक करने के लिए पर्याप्त नहीं था।

मैं एक और दृष्टिकोण है कि मिल गया है था कि समस्या का समाधान। यदि आप एक ही नाव में हैं, तो यह कोशिश करें:

  1. IIS प्रबंधक में, उस एप्लिकेशन का चयन करें जिसे PUT का समर्थन करने की आवश्यकता है।
  2. सुविधाएँ देखें में, WebDAV संलेखन नियम खोजें । इसे डबल-क्लिक करें, या संदर्भ मेनू (राइट-क्लिक) से ओपन फ़ीचर चुनें ।
  3. क्रिया फलक में, खोजने के लिए और पर क्लिक करें WebDAV सेटिंग ...
  4. WebDAV सेटिंग्स में, रिक्वेस्ट फ़िल्टरिंग बिहेवियर ढूंढें , और उसी के तहत, खोजें वर्ब फ़िल्टरिंग की अनुमति दें । सेट क्रिया छनन की अनुमति दें करने के लिए झूठी
  5. क्रियाएँ फलक में, लागू करें पर क्लिक करें

यह WebDAV को उन क्रियाओं को खारिज करने से रोकता है जो इसका समर्थन नहीं करती हैं, इस प्रकार एक PUT को आपके Restful हैंडलर के माध्यम से प्रवाहित होने की अनुमति नहीं देता है।


4

मुझसे एक और टिप। मैंने PHP + IIS का उपयोग किया है, और PHP के लिए हैंडलर मैपिंग में PUT क्रिया नहीं है।

IIS प्रबंधक-> आपकी साइट-> हैंडलर मैपिंग-> PHPxx_via_FastCGI-> अनुरोध प्रतिबंध-> क्रिया पर जाएं, फिर PUT जोड़ें।

बस!


1
यह उत्तर php उपयोगकर्ताओं की जरूरत है।
स्पीडऑफ राउंड

4

PUT और DELETE के काम करने से पहले एक और महत्वपूर्ण मॉड्यूल को पुन: कॉन्फ़िगर करने की आवश्यकता है, विकल्प क्रिया है

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

इस पोस्ट को भी देखें: https://stackoverflow.com/a/22018750/9376681


3

मेरे पास PUT, PATCH और DELETE के साथ समान मुद्दे थे लेकिन WebDav के साथ कुछ भी स्थापित नहीं था। इस लेख में समाधान 1 ने आखिरकार मेरी मदद की: http://support.microsoft.com/kb/942051


3

मैं Angular 8 का उपयोग कर रहा था और .NET कोर एपीआई था। मैं अपनी सेवा web.config फ़ाइल में निम्न जोड़ता हूं। जो मेरी त्रुटि का समाधान करे।

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

2

मेरे लिए यह त्रुटि दूर नहीं होगी और PUT विधियों को, जो कुछ भी मैंने किया है, की अनुमति नहीं दी जाएगी। .. और सुनिश्चित करें कि आईआईएस हैंडलर मैपिंग ने अनुरोध को हैंडल किया था ताकि पीयूटी कॉन्फ़िगर किया गया था।

मेरी समस्या अंततः ASP.NET 4.5 एक्सटेंशन के खराब इंस्टॉलेशन के कारण थी। सर्वर भूमिकाओं और सुविधाओं से asp.net से संबंधित सभी चीजों को हटा दिया गया। पुन: प्रारंभ। भूमिकाओं को पढ़ा और पुनः आरंभ किया। सब कुछ ऊपर विन्यास के साथ काम किया।

--- नीचे PUT को स्वीकार किया जाएगा, लेकिन इसे गलत हैंडलर को भेज दिया जाएगा। - नीचे दे

अंत में, आईआईएस पर TRACE हैंडलर मैपिंग पर अनुमत क्रिया के रूप में PUT क्रिया को जोड़ना .. क्योंकि मैंने विफल त्रुटि अनुरेखण सक्षम किया था, और यह क्रिया क्रिया की अनुमति नहीं दे रही थी।

पिछली बार मुझे किसी अन्य सर्वर के IIS पर समान समस्या थी, यह URL के अंत में एक लापता '/' के कारण था क्योंकि यह डिफ़ॉल्ट दस्तावेज़ का उपयोग किए बिना डिफ़ॉल्ट हैंडलर का उपयोग कर रहा था शायद और अब मुझे एहसास हुआ कि .. तो IIS की जांच करें हैंडलर मैपिंग अगर कुछ और मदद नहीं करता है।


2

मुझे यह समस्या थी लेकिन WebDAV से संबंधित कुछ भी मुद्दा नहीं था। मेरे मामले में, ग्राहक www.myServer.com/api/chart को एक पोस्ट भेज रहा था। इस कॉल को "ExtensionlessUrlHanlder-Integrated-4.0" द्वारा नियंत्रित किया जाना चाहिए, हालांकि, किसी तरह मेरे सर्वर निर्देशिका में एक स्थानीय फ़ाइल संरचना बनाई गई थी ... "\ Server \ api \ chart \"। इसका मतलब था कि इसके बजाय "स्टैटिकफाइल" हैंडलर को बुलाया जा रहा था। उन स्थानीय फ़ाइलों को हटाने से आखिरकार समस्या हल हो गई।


2

यहाँ मेरे लिए क्या काम किया गया है:

IIS खोलें और अपनी साइट पर क्लिक करें।

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


1

विंडोज सर्वर 2012 के लिए -> सर्वर मैनेजर पर जाएं -> रोल्स और फीचर्स को हटाएं -> सर्वर रोल्स -> वेब सर्वर (आईआईएस) -> वेब सर्वर -> कॉमन HTTP फीचर्स -> वेबडाव पब्लिशिंग को अनचेक करें और इसे हटाएं -> सर्वर को रीस्टार्ट करें।


0

यदि IIS ऐप पूल क्लासिक मोड में चल रहा है, तो सुनिश्चित करें कि आपके पास अपने web.config में निम्नलिखित हैं

<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

मेरे मामले में मैंने वेब पोर्ट को दूसरे पोर्ट पर स्थानांतरित कर दिया था, जो कि IIS पोर्ट (80 नहीं) था। मुझे पहली बार एहसास नहीं हुआ, लेकिन भले ही दोनों को एक ही पोर्ट के नीचे चलाने में कोई त्रुटि नहीं थी, लगता है कि वेब डिप्लॉय किसी कारण के लिए IIS की बजाय सबसे पहले प्रतिक्रिया दे रहा था, जिससे यह त्रुटि हुई। मैं बस अपने IIS को दूसरे पोर्ट पर ले गया और सब ठीक है। ;)


0

WebDav को बिल्कुल सक्षम होने से रोकने के लिए, ApplicationHost.config से निम्न प्रविष्टि को हटा दें: <add name="WebDAVModule" />

प्रविष्टि मॉड्यूल अनुभाग में स्थित है।

कॉन्फ़िगरेशन का सटीक स्थान: C:\Windows\System32\inetsrv\config\applicationHost.config


0

मैं एक ही समस्या थी, एक RESTful एपीआई aspnet कोर पर चल रहा है।

मैं WebDAV की स्थापना रद्द नहीं करना चाहता था, और मैंने ऊपर वर्णित अधिकांश उपचारों की कोशिश की। मैंने साइट पर और सर्वर पर दोनों क्रियाओं को = "*" सेट करने का प्रयास किया, लेकिन सफलता के बिना।

मेरे लिए क्या चाल थी:

IIS प्रबंधक -> साइटें -> MySite -> हैंडलर मैपिंग -> aspNetCore -> संपादित करें

-> अनुरोध प्रतिबंध -> पहुंच -> कोई नहीं (यह स्क्रिप्ट था)।

उसके बाद सब कुछ काम किया, भले ही मैंने मूल WebDAV विकल्पों को बदल दिया हो।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.