ASP.NET वेब एपीआई - PUT और DELETE क्रियाओं की अनुमति नहीं है - IIS 8


145

मैंने हाल ही में विजुअल स्टूडियो 2010 से विजुअल स्टूडियो 2012 आरसी में अपग्रेड किया है। इंस्टॉलर IIS 8 एक्सप्रेस भी स्थापित करता है जिसे विज़ुअल स्टूडियो अब डिफ़ॉल्ट वेब सर्वर के रूप में उपयोग करता है।

IIS 8 मेरे WEB API अनुरोधों को रोक रहा है जो PUT AND DELETE क्रिया का उपयोग करते हैं। आईआईएस 405 त्रुटि देता है, The requested resource does not support http method 'PUT'

मुझे पता है कि लोगों के पास अतीत में इसके साथ मुद्दे हैं और स्टैक ओवरफ्लो पर इसके बारे में कई संदेश हैं। IIS 7 एक्सप्रेस के साथ समाधान वेबडाव की स्थापना रद्द करना था। दुर्भाग्य से मुझे IIS 8 के साथ ऐसा करने का कोई तरीका नहीं दिखाई दे रहा है।

मैंने Applicationhost.config से WebDav अनुभागों को संपादित करने की कोशिश की है, लेकिन इससे कोई मदद नहीं मिली है। उदाहरण के लिए मैंने <add name="WebDAVModule" image="%IIS_BIN%\webdav.dll" />कॉन्फिग फाइल से हटा दिया ।

मैंने इस पर बहुत लंबा समय बिताया है। PUT और DELETE को सक्षम करने का एक सरल तरीका होना चाहिए?


यह अभी भी आरटीएम संस्करण में टूट गया। बस इस पर 3 घंटे बर्बाद हो गए ... जो कुछ भी आवश्यक था वह अतिरिक्त क्रियाओं को जोड़ना था ExtensionlessUrl-Integrated-4.0
लीपी

1
मुझे नहीं लगता कि यह टूटा हुआ है, लेकिन डिजाइन द्वारा है। मुझे लगता है कि डिफ़ॉल्ट व्यवहार को बदलना WebDAV के साथ हस्तक्षेप करेगा और पीछे की संगतता को तोड़ देगा। यह भी IIS7 के साथ काम नहीं किया जब WebDAV स्थापित किया गया था।
मार्क

मैं भी इस पर सिर्फ 3 घंटे बर्बाद ... इस पोस्ट के 6 साल बाद।
ब्रायन जेनकिंस

जवाबों:


162

ठीक है। मैं आखिरकार इस की तह तक गया। IIS8 के साथ सही ढंग से काम कर रहे PUT और DELETE क्रियाओं को प्राप्त करने के लिए आपको कुछ हुप्स के माध्यम से कूदने की आवश्यकता है। वास्तव में यदि आप वीएस 2012 के रिलीज के उम्मीदवार को स्थापित करते हैं और एक नई वेब एपीआई परियोजना बनाते हैं, तो आप पाएंगे कि नमूना पीयूटी और DELETE विधियाँ बॉक्स से 404 त्रुटियां लौटाती हैं।

वेब API के साथ PUT और DELETE क्रियाओं का उपयोग करने के लिए, आपको% userprofile% \ documents \ iisexpress \ config \ applicationhost.config को संपादित करने की आवश्यकता है और क्रिया को ExtensionlessUrl हैंडलर में निम्नानुसार जोड़ें:

इस पंक्ति को बदलें:

<add name="ExtensionlessUrl-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />

सेवा:

<add name="ExtensionlessUrl-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />

उपरोक्त के अतिरिक्त आपको यह सुनिश्चित करना चाहिए कि WebDAV आपके अनुरोधों में हस्तक्षेप नहीं कर रहा है। यह applicationhost.config से निम्नलिखित पंक्तियों पर टिप्पणी करके किया जा सकता है।

<add name="WebDAVModule" image="%IIS_BIN%\webdav.dll" />
<add name="WebDAVModule" /> 
<add name="WebDAV" path="*" verb="PROPFIND,PROPPATCH,MKCOL,PUT,COPY,DELETE,MOVE,LOCK,UNLOCK" modules="WebDAVModule" resourceType="Unspecified" requireAccess="None" />

यह भी ध्यान रखें कि डिफ़ॉल्ट वेब API कन्वेंशन यह है कि आपके विधि का नाम इनवॉल्ड HTTP वर्ब के समान होना चाहिए। उदाहरण के लिए यदि आप एक HTTP डिलीट रिक्वेस्ट भेज रहे हैं, तो डिफ़ॉल्ट रूप से, आपको डिलीट नाम देना चाहिए।


9
IIS8 पर विकल्प क्रिया के साथ इसी तरह की समस्याओं के लिए (जहां आपके हैंडलर से पहले कुछ और अवरोधन हो रहा है) अपने वेब में <name = "OPTIONSVerbHandler" /> नाम हटाएं। उस बात के लिए, मैं आपके स्थानीय वेब में "हटाएं" तकनीक का उपयोग करने की सलाह दूंगा। सामान्य नियम के रूप में जब संभव हो तो applicationhost.config के साथ खिलवाड़ करने पर
जेसन

7
: इसके बजाय सर्वर के स्तर पर WebDAV जो दस्तक-ऑन प्रभाव के रूप में यहाँ दिखाया गया है यह बेहतर है अपनी परियोजना से हटाने के लिए हो सकता है को दूर करने के stackoverflow.com/a/14465655/428280
मुड़

और फिर क्या? हो सकता है यहां तक ​​कि यह स्थानीय रूप से काम करेगा लेकिन
टूलकिट

3
एक उत्तर जो देव मशीनों पर भी सिस्टम सेटिंग्स को संशोधित करने का निर्देश देता है, एक उत्तर नहीं हो सकता है। यह एक लक्षण को हल करता है और वास्तव में टीमों और उत्पादन पर मदद नहीं करता है। क्या आप इसे हर मशीन पर दोहराएंगे? संतोष साह उत्तर देखें।
एंड्रे वेरलैंग

इसके अलावा, मुझे संतोष साह के जवाब केWebDAVModule अनुसार, मॉड्यूल खंड से निकालने की भी आवश्यकता थी ।
इवलो स्लाव

125

नीचे के रूप में अपनी Web.Config फ़ाइल बदलें। यह आकर्षण की तरह काम करेगा।

नोड <system.webServer>में कोड के हिस्से के नीचे जोड़ें

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

जोड़ने के बाद, आपका Web.Config नीचे जैसा दिखेगा

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

3
WebDavModule को हटाना इस समस्या को हल करने का सही तरीका है।
मिसराफी

6
मेरा दिन सहेजा गया: <मॉड्यूल runAllManagedModulesForAllRequests = "true"> <निकालें नाम = "WebDAVModule" /> </ मॉड्यूल>
पीटर स्टेग्नार

3
कस्टम हेडर की आवश्यकता नहीं होनी चाहिए क्योंकि वे कॉर्स से संबंधित हैं और इस तरह आप एक सुरक्षा छेद के लिए प्रेरित कर रहे हैं। बस WebDAVModuleसंबंधित हिस्सा प्रासंगिक है।
एन्द्र वेर्लंग

2
यह उत्तर एकमात्र अपवाद के साथ सही है कि हैंडलर का नाम IIS संस्करणों में भिन्न हो सकता है - उदाहरण के लिए 7.5 उपयोग "ExtensionlessUrlHandler-Integrated-4.0"(जैसा कि उपरोक्त उत्तर में है) जबकि IIS 8.5 का नाम बदल दिया गया है "ExtensionlessUrl-Integrated-4.0"( मार्क एस द्वारा उल्लिखित भी) हैंडलर का नाम दिखाया गया है। IIS त्रुटि पृष्ठ, एक बार जब आप त्रुटि प्राप्त करते हैं, तो यह जानने के लिए तुच्छ होना चाहिए कि कौन सा सेट करना है। मैं अलग-अलग होस्टिंग वातावरण का समर्थन करने के लिए दोनों नामों का उपयोग करता हूं।
Ivaylo Slavov

7
यह मुझे हर थोड़ी देर के अंदर मरने देता है जो मैं यह देखता हूं - runAllManagedModulesForAllRequests = "true" - समाधान के रूप में britishdeveloper.co.uk/2010/06/…
Oliver

61

निकालें WebDAV मेरे मामले के लिए पूरी तरह से काम करता है:

<modules>
  <remove name="WebDAVModule"/>
</modules>
<handlers>
  <remove name="WebDAV" />
  <remove name="ExtensionlessUrlHandler-Integrated-4.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>

वेब के माध्यम से समस्या को हल करने के लिए हमेशा बेहतर होता है। आईआईएस या मशीन के माध्यम से इसे ठीक करने के बजाय। यदि कोई अन्य मशीन पर ऐप को होस्ट किया जाता है, तो इसे देने के लिए।


यह मेरे लिए काम करता है, जहां अन्य किसी कारण से नहीं थे (IIS 8.5 पर था) धन्यवाद
जॉन

4
निकालें WebDAVModule ने मेरे लिए काम किया, हैंडलर WebDAV (IIS 8.0) को हटाने की कोई आवश्यकता नहीं है।
पीटरसन

3
बस वेबदाव को हटाने का काम 4.6.2 iis8.5 फ्रेमवर्क पर होता है
अब्दुल रहमान सईद

45

अपने web.config को अपडेट करें

  <system.webServer>
    <modules>
      <remove name="WebDAVModule"/>
    </modules>
    <handlers>
      <remove name="WebDAV" />
      <remove name="ExtensionlessUrl-Integrated-4.0" />
      <add name="ExtensionlessUrl-Integrated-4.0"
           path="*."
           verb="GET,HEAD,POST,DEBUG,DELETE,PUT"
           type="System.Web.Handlers.TransferRequestHandler"
           preCondition="integratedMode,runtimeVersionv4.0" />
    </handlers>
  </system.webServer>

http://odetocode.com/blogs/scott/archive/2012/08/07/configuration-tips-for-asp-net-mvc-4-on-a-windows.aspx

आपके होस्ट कॉन्फ़िगरेशन को संशोधित करने की आवश्यकता को निकालता है।


1
मुझे पहले से ही अन्य पंक्ति लिखी गई थी लेकिन यह काम नहीं कर रहा था। लाइनों को जोड़ने के बाद <Remove name = "WebDAVModule" /> और <remove name = "WebDAV" /> अब काम कर रहा है। मेरी तरफ से बहुत बहुत धन्यवाद और 1 वोट।
बंकटेश्वर नारायण

यह काम करता है, लेकिन web.config में <मॉड्यूल> के उपयोग को रोकने वाले कॉन्फ़िगरेशन लॉकिंग के कारण विफल हो सकता है। इस स्थिति में, आपको applicationHost.config में कॉन्फ़िगरेशन लॉक को अक्षम करना होगा। यदि आपके पास किसी कारण से ApplicationHost.config पर नियंत्रण नहीं है, तो इस दृष्टिकोण का उपयोग नहीं किया जा सकता है।
फ्लोरियन विंटर

IIS10 के साथ काम किया, हालांकि मैंने क्रिया के रूप में "*" का उपयोग किया था
जेवियर

1
IIS 10 और वेब API के साथ काम किया। 2. काम करना चाहिए, मुझे जोड़ना चाहिए, एक और दर्जन "समाधान" के बाद मैंने पाया कि ऑनलाइन नहीं था। धन्यवाद!
मैट वेस्ट

@ क्रिसमिसिक: यह मेरे लिए एक आकर्षण की तरह काम करता है धन्यवाद!
तिवारी

18

Asp.Net वेब एपीआई में - webconfig। यह सभी ब्राउज़र में काम करता है।

निम्न कोड को System.web टैग के अंदर जोड़ें

<webServices>
  <protocols>
    <add name="HttpGet"/>
    <add name="HttpPost"/>
  </protocols>
</webServices>

नीचे दिए गए कोड के साथ अपने system.webserver टैग को बदलें

<httpProtocol>
  <customHeaders>
    <add name="Access-Control-Allow-Origin" value="*" />
    <add name="Access-Control-Allow-Methods" value="GET,PUT,POST,DELETE" />
    <add name="Access-Control-Allow-Headers" value="Content-Type" />
  </customHeaders>
</httpProtocol>
<modules runAllManagedModulesForAllRequests="false">
  <remove name="WebDAVModule" />
</modules>

<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" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />

</handlers>


मुझे IIS 7.5 में यह समस्या थी, और इस फिक्स ने पूरी तरह से काम किया। अपने सभी system.webserver सामग्री को हटाने के बजाय, मैंने ऊपर की संबंधित सेटिंग्स को अपनी सेटिंग्स में मर्ज कर दिया।
कीथ वाल्टन

38
चेतावनी : उपरोक्त कोड में कस्टम हेडर अनुभाग किसी भी साइट को आपके एपीआई को एक ब्राउज़र से कॉल करने की अनुमति देता है - जो एक बड़ा सुरक्षा जोखिम है । कॉर्स पर पढ़ें, जो प्रभावी रूप से उन हेडर को सक्षम कर रहे हैं।
प्रोफाम्बा

इसके अलावा iis 7.5 पर यह मुद्दा था और इसने काम किया। टूलकिट का संदेश ऊपर पढ़ने के जोखिम के बारे में सभी को बताने के लिए सुनिश्चित करें। साथ ही उनकी टिप्पणी को भी खारिज कर दिया क्योंकि tidbits बहुत मूल्यवान है।
sjdirect

मुझे नहीं लगता कि आपको इस मामले में कस्टम हेडर की आवश्यकता है। शेष system.webserverअनुभाग को पर्याप्त होना चाहिए - बस यह सुनिश्चित करें कि आपके पास विस्तारहीन यूआरएल हैंडलर का सही नाम है
इवलो स्लाव

1
@niico आपको केवल विश्वसनीय साइटों तक पहुँच-नियंत्रण-अनुमति-उत्पत्ति अर्थात् "*" को अपनी वेबसाइट (यूआरएल) के साथ बदलने की अनुमति देनी चाहिए। यह संपत्ति सभी विश्वसनीय साइटों की एक सफेद सूची है, जब तक कि आप संपूर्ण वेब पर भरोसा नहीं करना चाहते (जो आमतौर पर एक बुरा विचार है)।
प्रोफम्बा

5

यह मेरे लिए iis8 पर कुछ अन्य उत्तरों के साथ मिलकर काम किया। मेरी त्रुटि विशेष रूप से 404.6 थी

<system.webServer>
  <security>
  <requestFiltering>
    <verbs applyToWebDAV="false">
       <add verb="DELETE" allowed="true" />
    </verbs>
  </requestFiltering>
  </security>
</system.webServer>

जब आप AppCmd ​​चलाते हैं, तो यह वही होता है जो आपके वेब में डालता है। Config (applyToWebDAV बिट को छोड़कर)।
चेस फ्लोरल

5

किसी और के लिए बस एक त्वरित अद्यतन जो इस समस्या में चल सकता है। आज के अनुसार,% userprofile% \ documents \ iisexpress \ config \ applicationhost.config को बदलने से अब कोई काम नहीं होता (यह अब तक ठीक काम कर रहा था, यकीन नहीं होता कि यह विंडोज अपडेट के कारण है)। घंटों की हताशा के बाद, मैंने इन हैंडलर को सिस्टम में जोड़ने के लिए web.config को बदल दिया। इसे काम करने के लिए प्राप्त करने के लिए:

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

4

सक्षम (अच्छा और साफ)

1. कॉड nuget पैकेज जोड़ें

Install-Package microsoft.aspnet.webapi.cors

2. WebApiConfig.cs फ़ाइल को रजिस्टर करने के लिए फ़ाइल में कोड जोड़ें:

config.EnableCors();

पूर्व:
System.Web.Http का उपयोग करना;

namespace test
{
public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        // Web API configuration and services


        config.EnableCors(); //add this**************************


        // Web API routes
        config.MapHttpAttributeRoutes();

        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );           
    }
}
}

नियंत्रक के नाम स्थान में 3.Add bellow कोड प्राप्त करें, पोस्ट, हटाएं, पुट या कोई http विधि शामिल करें

[EnableCors(origins: "The address from which the request comes", headers: "*", methods: "*")]

उदाहरण के लिए:

using System.Web.Http.Cors;//add this******************************
namespace Test.Controllers
{
[EnableCors(origins: "http://localhost:53681/HTML/Restaurant.html", headers: "*", methods: "*")]
public class RestaurantController : ApiController
{
    protected TestBusinessLayer DevTestBLL = new TestBusinessLayer();

    public List<Restaurant> GET()
    {
        return DevTestBLL.GetRestaurant();
    }

    public List<Restaurant> DELETE(int id)
    {
        return DevTestBLL.DeleteRestaurant(id);
    }       
}
}

संदर्भ: http://www.asp.net/web-api/overview/security/en enable-cross-origin-requests-in-web-api


4

कुछ भी काम नहीं करने के बाद, मैं नीचे दिए चरणों से इसे हल करने में सक्षम था:

• IIS स्थापित करते समय 'WEB DAV प्रकाशन' IIS सेटिंग्स का चयन नहीं किया। • INETMGR - डिफ़ॉल्ट वेबसाइट - अनुरोध फ़िल्टरिंग - HTTP क्रिया - सच के रूप में बाहर निकलें


3

अंतहीन खोज और पहले से ही आपूर्ति किए गए उत्तरों की कोशिश करने के बाद (PUT, DELETE क्रिया और WEBdav को हटाकर) यह सिर्फ काम नहीं किया।

मैं IIS लॉगिंग सेटिंग्स में गया:> लॉग फाइलें देखें। मेरे मामले में W3SVC4 नवीनतम तिथि वाला फ़ोल्डर था, फ़ोल्डर खोला, नवीनतम लॉग फ़ाइल को देखा और इस प्रविष्टि को देखा: GET / अस्वीकृत-बाय-UrlScan ~ / MYDOMAIN / API / ApiName / UpdateMETHOD

अद्यतन विधि क्रिया GET, अजीब सही के साथ सूचीबद्ध की गई थी? इसलिए मैंने रिजेक्ट-बाय-उरलस्कन के लिए गॉगल किया और इस लिंक को पाया: उरलस्कैन ब्रोक माय ब्लॉग

मैं यहाँ गया:% windir% \ system32 \ inetsrv \ urlscan \ UrlScan.ini

मूल रूप से, UrlScan ने PUT और DELETE क्रियाओं को अवरुद्ध कर दिया। मैंने इस INI फ़ाइल को खोला, PUT और DELETE को AllowVerbs में जोड़ा और उन्हें DenyVerbs लिस्टिंग से हटा दिया। मैंने INI फ़ाइल को सहेजा और यह काम कर गया! इसलिए मेरे लिए ये कदम एक्सटेंसिबल यूआरएल्डलर संकेत के बगल में आवश्यक थे।

विंडोज वेबसर्वर 2008 R2 (64 बिट), आईआईएस 7.5। मैं DotNetNuke (DNN) WebAPI के साथ संयोजन में इसका उपयोग कर रहा हूं। ASP.Net 4.0 मेरी अद्यतन विधि:

[HttpPut]
[DnnAuthorize(StaticRoles = "MyRoleNames")]
public HttpResponseMessage UpdateMETHOD(DTO.MyObject myData)

3

PHP के लिए, यह बस था:

  1. IIS खोलें
  2. हैंडलर मैपिंग पर जाएं
  3. php5.6.x या php7.0.x पर संपादित करें पर क्लिक करें
  4. "अनुरोध प्रतिबंध" पर क्लिक करें
  5. क्रिया टैब के अंतर्गत, "निम्न क्रियाओं में से एक" चुनें और "GET, HEAD, POST, PUT, PATCH, DELETE, OPT" जोड़ें

मुझे लगता है कि यह अन्य हैंडलर के साथ भी काम करेगा।


2

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

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

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

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

आप डेटा प्रकार बदल सकते हैं आईडी

उदाहरण के लिए नीचे का तरीका ठीक काम करना चाहिए:

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

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

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

उदाहरण:

DELETE http://localhost/item/1

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


2

मैंने आपके साथ एक ही मुद्दे का सामना किया है, फिर इसे हल किया है, यहां समाधान हैं, मैं चाहता हूं कि यह
पहले मदद कर सकता है

IIS में modules कॉन्फ़िगरेशन में, WebDAVModule को लूप करें , यदि आपके वेब सर्वर में यह है, तो उसे हटा दें

दूसरा

IIS handler mappingsकॉन्फ़िगरेशन में, आप हैंडलर को सक्षम करने की सूची देख सकते हैं, चुनने के लिएthe PHP item , संपादित करने, संपादित करने के पृष्ठ पर , अनुरोध प्रतिबंध बटन पर क्लिक कर सकते हैं, फिर the verbs tabमोडल में चयन कर सकते हैं , निर्दिष्ट करने के लिए क्रियाओं में लेबल हैंडल करें, चेक करेंall verbs radio , फिर ठीक क्लिक करें, आप शायद एक चेतावनी भी देखें, यह हमें दिखाता है कि PHP-CGI निष्पादन के लिए दोहरे उद्धरण चिह्नों का उपयोग करें, फिर करें

यदि यह किया जाता है, तो IIS सर्वर को पुनरारंभ करें, यह ठीक होगा

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


1
मैंने केवल IIS वेबसाइट से WebDAVModule को हटाया और मेरे लिए काम किया
उमैर मल्ही

1

मुझे यकीन नहीं है कि आपने सही कॉन्फ़िगरेशन फ़ाइल संपादित की है। निम्न चरणों का प्रयास करें

  1. खुले% उपयोगकर्ताप्रतिष्ठित% \ ducuments \ iisexpress \ config \ applicationhost.config

  2. डिफॉल्ट bellow द्वारा दी गई प्रविष्टियों को applicationhost.config फ़ाइल में टिप्पणी की जाती है। इन प्रविष्टियों को अनफॉलो करें।

<add name="WebDAVModule" image="%IIS_BIN%\webdav.dll" />


<add name="WebDAVModule" />
<add name="WebDAV" path="*"
 verb="PROPFIND,PROPPATCH,MKCOL,PUT,COPY,DELETE,MOVE,LOCK,UNLOCK"
 modules="WebDAVModule" resourceType="Unspecified" requireAccess="None"
 />

4
Applicationhost.config के साथ खिलवाड़? नोप
टूलकिट

किसी को अनुप्रयोग कॉन्फ़िगरेशन फ़ाइल के अलावा अन्य के साथ गड़बड़ नहीं करनी चाहिए। पहला- आप इसे पूरे सर्वर के लिए करेंगे और भूल जाएंगे, तो कई लोग आश्चर्य करेंगे कि यह इस मशीन पर कैसे काम करता है और बाकी पर काम नहीं करता है। इसके अलावा, यदि आपको उस सर्वर पर IIS कॉन्फ़िग फ़ाइल तक पहुंच की अनुमति नहीं है जहां एप्लिकेशन होस्ट किया गया है, तो आपको इसे web.config में काम करना होगा। कल्पना कीजिए कि आपके देव सर्वर में उपरोक्त अपडेट है, क्या आपका web.config सही होगा? यह किसी की जांच ढीली करने का एक शानदार तरीका है कि उत्पादन परिनियोजन क्यों विफल हो गया है
Ivaylo Slavov

1

यहां बताया गया है कि आप IIS प्रबंधक GUI का उपयोग करके अतिरिक्त HTTP क्रियाओं की अनुमति कैसे देते हैं।

  1. IIS प्रबंधक में, वह साइट चुनें जिसके लिए आप PUT या DELETE की अनुमति देना चाहते हैं।

  2. "अनुरोध फ़िल्टरिंग" विकल्प पर क्लिक करें। "HTTP क्रिया" टैब पर क्लिक करें।

  3. साइडबार में "अनुमति दें वर्ब ..." लिंक पर क्लिक करें।

  4. दिखाई देने वाले बॉक्स में "DELETE" टाइप करें, ठीक पर क्लिक करें।

  5. फिर से साइडबार में "अनुमति दें वर्ब ..." लिंक पर क्लिक करें।

  6. दिखाई देने वाले बॉक्स में "PUT" टाइप करें, ठीक पर क्लिक करें।


अच्छी कोशिश - एक बार के लिए कुछ अलग - लेकिन फिर भी काम नहीं किया!
ozzy432836

मैंने एसओ और अन्य जगहों पर सुझाए गए सभी चीजों की कोशिश की थी। मैंने आखिरकार यह कोशिश की और इसने पूरी तरह से काम किया। मेरे मामले में, PUT और DELETE क्रियाएं पहले से ही सूची में थीं, और मुझे उन्हें पहले हटाना था, फिर उन्हें Allow Verb ... लिंक का उपयोग करके वापस जोड़ें, लेकिन फिर भी, यह तब काम किया जब कुछ और नहीं था। आपको बहुत - बहुत धन्यवाद!
जेटेनसन

1

मैं एक एमवीसी एप्लिकेशन में एशक्स फ़ाइल का उपयोग कर रहा हूं और उपरोक्त उत्तरों में से कोई भी मेरे लिए काम नहीं करता है। IIS 10।

यहाँ क्या काम किया है। IIS या web.config में " ExtensionlessUrl-Integrated-4.0 " को बदलने के बजाय मैंने " * .ashx " फाइलों के लिए " SimpleHandlerFactory-Integrated-4.0 " को बदल दिया :

<add name="SimpleHandlerFactory-Integrated-4.0" path="*.ashx" 
verb="GET,HEAD,POST,DEBUG,PUT,DELETE" 
type="System.Web.UI.SimpleHandlerFactory" 
resourceType="Unspecified" requireAccess="Script" 
preCondition="integratedMode,runtimeVersionv4.0" />

0

दूसरा कारण निम्नलिखित हो सकता है:
मैंने इस उत्तर के अनुसार वेब एपली विधि के लिए अपना यूआरएल बदल दिया है :

Url.Action("MyAction", "MyApiCtrl", new { httproute = "" })

लेकिन यह विधि इस तरह लिंक बनाती है:

/api/MyApiCtrl?action=MyAction

यह GET और POST अनुरोधों के साथ सही ढंग से काम करता है लेकिन PUT या DELETE के साथ नहीं।
इसलिए मैंने इसे इसके साथ बदल दिया:

/api/MyApiCtrl

और इसने समस्या को ठीक कर दिया।


0

IIS 8.5 / विंडोज 2012R2 में, यहां उल्लेखित कुछ भी मेरे लिए काम नहीं किया। मुझे नहीं पता कि वेबडैव को हटाने का क्या मतलब है लेकिन यह मेरे लिए समस्या का समाधान नहीं है।

नीचे दिए गए चरणों से मुझे क्या मदद मिली;

  1. मैं IIS मैनेजर के पास गया।
  2. बाएं पैनल में साइट का चयन किया।
  3. बाएं कार्य क्षेत्र में, WebDAV को चुना, इसे डबल क्लिक करके खोला।
  4. सही अधिकांश पैनल में, इसे अक्षम कर दिया।

अब सब कुछ काम कर रहा है।


-1

आप अपनी डिलीट विधि को POST के रूप में परिवर्तित कर सकते हैं;

 [HttpPost]
 public void Delete(YourDomainModel itemToDelete)
 {
 }
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.