दिलचस्प पोस्ट
उबंटू में नोड पैकेज मैनेजर के जरिए पैकेज स्थापित नहीं किया जा सकता दूसरे वेबसाइट पर रेल में नियंत्रक से डाक डेटा जमा करना कैसे सही बीन क्षेत्र का चयन करने के लिए? टाइल्स ड्रॉएबल कभी-कभी फैलता है चेक और चयनित के लिए कौन से मान गलत हैं? क्या मैं अनाम रूपों को XML के रूप में सीरियल कर सकता हूँ? एचटीएमएल – गुण बनाम गुण क्या जावा एक ऑब्जेक्ट को अंतिम रूप दे सकता है जब यह अभी भी क्षेत्र में है? जहां x86-64 सिस्टम वी एबीआई दस्तावेज है? पोस्टग्रेज़ JSON डेटा प्रकार रेल क्वेरी जावा पैकेज से गुण फ़ाइल लोड करना जेएसन के साथ रेल तिथियां ओरेकल में उपयोगकर्ता और एक स्कीमा के बीच का अंतर? JavaFX के साथ आकृतियों के टकराव की जांच करना Php में "शामिल" और "आवश्यकता" के बीच का अंतर

एएसपी.नेट वेब एपीआई – 405 – इस पेज को एक्सेस करने के लिए इस्तेमाल किया गया एचटीटीपी क्रिया की अनुमति नहीं है – हैंडलर मैपिंग कैसे सेट करें

मैंने एएसपी.एनटी वेब एपीआई का इस्तेमाल करते हुए आरईएसटी सेवा लिखी है। मैं HttpDelete अनुरोध भेजने की कोशिश कर रहा हूं, हालांकि मुझे निम्न त्रुटि मिलती है:

405 – इस पृष्ठ को एक्सेस करने के लिए उपयोग किए जाने वाले HTTP क्रिया की अनुमति नहीं है

मुझे लगता है कि मैं समाधान के करीब हूं, मुझे पता चला कि मुझे आईआईएस रिमोट प्रबंधन को सक्षम करना चाहिए, हेन्डलर मैपिंग्स अनुभाग पर जाएं और उचित स्थिति में DELETE क्रिया जोड़ें … लेकिन समस्या यह है कि बहुत से विभिन्न पदों पर सूची … (यहाँ की तरह sth: http://www.somacon.com/p126.php )।

मुझे कौन सा संपादित करना चाहिए? उनमें से कुछ का एक्सटेंशन नहीं है, जैसे "एक्सटेंशनउरिल-एचएंडलर-इंटीग्रेटेड-4.0" और मैंने इसमें डेलीएट क्रिया को जोड़ा, लेकिन यह अभी भी काम नहीं करता …

यह एक को संशोधित करने के लिए अंधेरे में सिर्फ एक शॉट था, इसलिए मुझे अलग स्थिति में बदलाव करना चाहिए? यदि हां, तो कौन सा? या हो सकता है कि कुछ भी मुझे क्या करना चाहिए?

मेरी स्थानीय सेवा पर एक ही वेब सेवा पूरी तरह से ठीक काम करती है, इसलिए मुझे लगता है कि समस्या दूरस्थ आईआईएस के साथ है …

अस्सलाम वालेकुम

वेब के समाधान से एकत्रित समाधान "एएसपी.नेट वेब एपीआई – 405 – इस पेज को एक्सेस करने के लिए इस्तेमाल किया गया एचटीटीपी क्रिया की अनुमति नहीं है – हैंडलर मैपिंग कैसे सेट करें"

इस त्रुटि का सामान्य कारण WebDAV है । सुनिश्चित करें कि आप इसे अनइंस्टॉल करें

आपको WebDAV की स्थापना रद्द करने की आवश्यकता नहीं है, बस इन लाइनों को web.config पर जोड़ें:

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

अपनी वेब को बदलें। यह आकर्षण की तरह काम करेगा

नोड में <system.webServer> कोड के नीचे भाग जोड़ें

 <modules runAllManagedModulesForAllRequests="true"> <remove name="WebDAVModule"/> </modules> 

जोड़ने के बाद, आपका वेब। कॉन्फ़िफ़ नीचे दिखेगा

 <system.webServer> <validation validateIntegratedModeConfiguration="false" /> <modules runAllManagedModulesForAllRequests="true"> <remove name="WebDAVModule"/> </modules> <httpProtocol> <customHeaders> <add name="Access-Control-Allow-Origin" value="*" /> <add name="Access-Control-Allow-Headers" value="Content-Type" /> <add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS" /> </customHeaders> </httpProtocol> <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> 

अपनी वेब को बदलें

  <system.webServer> <validation validateIntegratedModeConfiguration="false"/> <modules runAllManagedModulesForAllRequests="true"> <remove name="WebDAVModule" /> </modules> <handlers> <remove name="WebDAV"/> <remove name="ExtensionlessUrlHandler-Integrated-4.0"/> <remove name="OPTIONSVerbHandler"/> <remove name="TRACEVerbHandler"/> <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" /> </handlers> </system.webServer> 

असामान्य लेकिन कुछ मदद कर सकता है

सुनिश्चित करें कि आप सिस्टम से [एचटीपीपीट] का प्रयोग कर रहे हैं। वेब। एचटीपीपी

हम एचटीपीपीट की सजाए गए विधि पर 'विधि अनुमति नहीं दी गई' 405 हो रही थी।

हमारी समस्या असामान्य प्रतीत होती है, क्योंकि हमने गलती से [एचटीपीपीट] विशेषता का इस्तेमाल किया। सिस्टम से.वेब.एमवीसी और नहीं System.Web.Http

कारण, रिचार्पर ने एमवीसी संस्करण का सुझाव दिया है, जहां आमतौर पर सिस्टम। वेब। एचटीटीपी पहले से संदर्भित है जब आप सीधे एपीआई नियंत्रक से प्राप्त करते हैं, तो हम उस क्लाइंट का उपयोग कर रहे थे जो विस्तारित एपीआईकंट्रोलर थे।

अगर उपरोक्त समाधानों में से कोई भी आपके मामले की तरह मेरे मामले की हल नहीं हुई (अभी भी मेरे बाकी क्लाइंट के साथ 405 का सामना करना पड़ रहा है) आपके एपी को फइल्डलर जैसे उपकरण के साथ अनुरोध करने का प्रयास करें मेरा मतलब है कि समस्या कहीं खराब स्वरूपित अनुरोध की तरह हो सकती है।

मुझे पता चलता है कि मेरे रेस्ट क्लाइंट मॉड्यूल एक आईडी पुरेमीटर के साथ 'पुट' पूछ रहा था जो अच्छी तरह से स्वरूपित नहीं था:

 http://myserver/api/someresource?id=75fd954d-d984-4a31-82fc-8132e1644f78 

के बजाय

 http://myserver/api/someresource/75fd954d-d984-4a31-82fc-8132e1644f78 

भ्रामक ढंग से, खराब स्वरूपित अनुरोध 405 लौटाता है – विधि अनुमति नहीं है (IIS 7.5)

मैंने ऐसा किया था (405 विधि की अनुमति नहीं है) जब वेब एपीआई पोस्ट विधि मैं बुला रहा था तो पैरामीटर्स के लिए आदिम प्रकार होते थे, जो कि शरीर से पहुंचाए गए जटिल प्रकार की बजाय इस तरह:

यह काम किया:

  [Route("update"), Authorize, HttpPost] public int Update([FromBody] updateObject update) 

यह नहीं था:

  [Route("update"), Authorize, HttpPost] public int Update(string whatever, int whatever, string whatever) 

हमारे मामले में, समस्या एक नेट साइट और एडीएफएस के बीच फ़ेडरेटेड संकेत के साथ थी। जब ADFS समापन बिंदु पर पुनर्निर्देशित होता है तो WSFederationAuthenticationModule.CreateSignInRequest . WSFederationAuthenticationModule.CreateSignInRequest विधि के लिए WSFederationAuthenticationModule.CreateSignInRequest पैरामीटर को सभी तीन मापदंडों की WSFederationAuthenticationModule.CreateSignInRequest होती है: rm , id , और ru

यूपीएल मापदंडों की जांच करने के लिए टिप के लिए Guillaume Raymond का धन्यवाद!

उपर्युक्त सभी समाधानों के अलावा, जांचें कि आपके पास " id " है या DELETE विधि में कोई कस्टम परिभाषित पैरामीटर मार्ग कॉन्फ़िग से मेल खाता है।

 public void Delete(int id) { //some code here } 

यदि आप दोहराया 405 त्रुटियों के साथ हिट करते हैं, तो ऊपर के रूप में डिफ़ॉल्ट रूप से विधि हस्ताक्षर रीसेट करें और कोशिश करें।

डिफ़ॉल्ट रूप से पथ कॉन्फ़िगर यूआरएल में id लिए दिखेगा। इसलिए पैरामीटर नाम id यहां महत्वपूर्ण है जब तक कि आप App_Start फ़ोल्डर के तहत मार्ग कॉन्फ़िग को बदल न App_Start

आप हालांकि id का डेटा प्रकार बदल सकते हैं।

उदाहरण के लिए, नीचे विधि को ठीक काम करना चाहिए:

 public void Delete(string id) { //some code here } 

नोट: यह भी सुनिश्चित करें कि आप यूआरएल के ऊपर डेटा पास करते हैं जो डेटा विधि नहीं है जो पटलोड को बॉडी कंटेंट के रूप में ले जाएगा।

 DELETE http://{url}/{action}/{id} 

उदाहरण:

 DELETE http://localhost/item/1 

आशा करता हूँ की ये काम करेगा।

यह त्रुटि staticfile हैंडलर से आ रही है – जो डिफ़ॉल्ट रूप से किसी भी क्रिया को फ़िल्टर नहीं करता है, लेकिन शायद केवल सिर और GET के साथ काम कर सकता है

और ऐसा इसलिए है क्योंकि कोई अन्य हैंडलर प्लेट तक नहीं पहुंच गया और कहा कि वे DELETE को संभाल सकते हैं

चूंकि आप WEBAPI का उपयोग कर रहे हैं, जिसकी वजह से रूटिंग में फ़ाइलों और इसलिए एक्सटेंशन नहीं हैं, आपके वेब। कॉन्फिग फ़ाइल में निम्नलिखित जोड़ जोड़े जाने की आवश्यकता है:

 <system.webserver> <httpProtocol> <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="C:\windows\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="C:\windows\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" /> 

जाहिर है कि क्लासिकमॉड बनाम एकीकृत मॉोड पर निर्भर करता है, और क्लासिकमॉड बीटल पर निर्भर करता है। इसके अलावा, कॉरिस प्रसंस्करण के लिए ऑप्शन हेडर जोड़ा गया है, लेकिन अगर आप कॉरस नहीं करते हैं तो आपको इसकी आवश्यकता नहीं है।

एफवाईआई, आपका वेब। कॉन्फ़िग, एप्लिकेशन (या एप्लिकेशन डाइरेक्टरी) का स्थानीय संस्करण है जिसका उच्च स्तर है applicationHost.config

यदि यह IIS 8.0 है, तो जांचें कि क्या HTTP सक्रियकरण सक्षम है। सर्वर मैनेजर -> आईआईएस -> प्रबंधन (दाहिने शीर्ष देखें) -> भूमिकाएं और विशेषताएं जोड़ें -> … -> डब्लूसीएफ कॉन्फ़िगरेशन पर जाएं और फिर एचटीटीपी सक्रियण चुनें।