2012-02-06 21 views
12

पर Http PUT अनुरोध सक्षम करें मैं एक एमवीसी अनुप्रयोग पर काम कर रहा हूं। सेवा के मेरे मूल मसौदे पर मेरे पास मेरे नियंत्रकों में से एक विधि थी:.NET MVC

[AcceptVerbs(HttpVerbs.Post)] 
    [ActionName("UpdateRelationship")] 
    public ActionResult UpdateRelationship(string aParameter) 

और यह ठीक काम करता था। नवीनतम संशोधन में मुझे इसे एक पुट अनुरोध में बदलने के लिए कहा गया है ताकि इसे उसी तरह के जोड़ तंत्र से अलग किया जा सके जो पोस्ट का उपयोग करता है। तो मैं इसे इस के लिए बदल दिया:

[AcceptVerbs(HttpVerbs.Put)] 
    [ActionName("UpdateRelationship")] 
    public ActionResult UpdateRelationship(string aParameter) 

और अचानक मैं अपने अनुरोध पर एक 404 हो रही है, सब सिर्फ AcceptVerbs में बदलाव करने से। त्रुटि के रूप में, ऐसा प्रतीत होता है कि आईआईएस एमवीसी एक्सटेंशनलेस यूआरएल पुनः लिखने के बजाय मानक वेबफॉर्म पेज के रूप में अनुरोध को रूट करने का प्रयास कर रहा है।

यह गुगल करना ऐसा लगता है कि एक आम कारण ब्राउज़र ब्राउज़र अनुरोधों की अनुमति नहीं दे रहा है लेकिन मैं इसका परीक्षण करने के लिए ब्राउज़र का उपयोग नहीं कर रहा हूं - मैं फिडलर का उपयोग कर रहा हूं। तो वहां कोई समस्या नहीं होनी चाहिए। मुझे यह भी लगता है कि सही सेटिंग्स पहले से ही web.config में हैं:

<system.webServer> 
    <validation validateIntegratedModeConfiguration="false" /> 
    <modules runAllManagedModulesForAllRequests="true"> 
    <remove name="WebDAVModule" /> 
    </modules> 
    <handlers> 
     <remove name="UrlRoutingHandler" /> 
     <remove name="MvcHttpHandler" /> 
    <remove name="WebDAV" /> 
     <add name="MvcHttpHandler" preCondition="integratedMode" verb="*" path="*.mvc" type="System.Web.Mvc.MvcHttpHandler, System.Web.Mvc, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> 
    </handlers> 
    <security> 
     <requestFiltering> 
      <verbs> 
       <add verb="PUT" allowed="true" /> 
      </verbs> 
     </requestFiltering> 
    </security> 
</system.webServer> 

तो मुझे क्या याद आया?

संपादित करें: यह कोड सहकर्मियों की मशीन पर काम करता है। तो ऐसा लगता है कि आईआईएस के मेरे स्थानीय सेटअप की गलती है। फिर भी यह समझाने के लिए एक नुकसान पर मुझे क्या बदलने की जरूरत है - कोई विचार?

चीयर्स, मैट

+0

में कहा गया है को दूर करने के लिए किया था? अगर पूर्ण खून है, तो आप किस ओएस पर हैं? –

+0

यह वह है जो विंडोज 7 समर्थक में बनाया गया है - इसलिए मुझे लगता है कि यह व्यक्त है। –

उत्तर

4

ज्यादा निरर्थक खोज और अंधा WebDAV शामिल गलियों बाद मैं एक और अतः परिवार साइट :) पर जवाब मिला

https://serverfault.com/questions/93424/how-to-enable-put-and-delete-in-iis7

+0

आपने किस एक्सटेंशन को अपडेट किया है? जवाब एमवीसी के लिए किसी भी एक्सटेंशन (.aspx/.ascx) को udpdae कहता है, ऐसा कोई एक्सटेंशन नहीं है। क्या आप अपना जवाब विस्तृत कर सकते हैं? – Shyju

3

विन्यास है कि हम के लिए काम किया था निम्नलिखित ।

<system.webServer> 
    <modules runAllManagedModulesForAllRequests="false"> 
     <remove name="UrlRoutingModule" /> 
     <add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" preCondition="" /> 
    </modules> 
    <handlers> 
     <remove name="ExtensionlessUrlHandler-Integrated-4.0" /> 
     <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,POST,PUT,DELETE" type="System.Web.Handlers.TransferRequestHandler" resourceType="Unspecified" requireAccess="Script" preCondition="integratedMode,runtimeVersionv4.0" /> 
    </handlers> 
</system.webServer> 

यह विस्तार-रहित यूआरएल के लिए विशिष्ट है।

बीटीडब्ल्यू सामान्य सिफारिश रनऑलमेनेड मॉड्यूलफोरएलआरक्वेट्स = झूठी सेट करने के लिए है।

+1

रेखा गलत है, ' होना चाहिए ' – Tyrsius

8

मैं WebDav मॉड्यूल आप आईआईएस एक्सप्रेस या पूर्ण खून आईआईएस उपयोग कर रहे हैं पूरी तरह से एक this blog post

<configuration> 
    <system.webServer> 
    <handlers> 
     <remove name="WebDAV" /> 
     <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> 
    <modules> 
     <remove name="WebDAVModule" /> 
    </modules> 
    </system.webServer> 
</configuration> 
+0

इसने गोडाडी साझा करने पर मेरी समस्या हल की। डिफ़ॉल्ट रूप से केवल GET और POST सक्षम होते हैं लेकिन इसने मेरे REST एपीआई के लिए PUT और DELETE (और HEAD) को अनुमति दी है। –

+0

इस पोस्ट की तरह मॉड्यूल WebDAVModule को हटाने के लिए मत भूलना, यही वजह है कि यह गोडाडी होस्ट में काम नहीं कर रहा था। – Lelis718

+1

इस समस्या से लड़ने में लगभग दो दिन बाद, आपने अपना जीवन बचाया। धन्यवाद दोस्त। यह वास्तव में GO_TRASH_DADDY के साथ मेरी समस्या हल हो गया। –