2013-03-29 8 views
5

का समर्थन नहीं करता है, मैं अपने वेब एपीआई (एमवीसी 4) के साथ विशेषता रूटिंग का उपयोग कर रहा हूं।अनुरोधित संसाधन http विधि "PUT"

यह क्यों काम करता है?

[AcceptVerbs("PUT")] 
    [PUT("api/v1/tokens/current")] 
    public MemoryToken UpdateToken([FromBody] DeviceTokenViewModel viewModel) 
    {...} 

और यह कोई नहीं है?

[PUT("api/v1/tokens/current")] 
    public MemoryToken UpdateToken([FromBody] DeviceTokenViewModel viewModel) 
    {...} 

त्रुटि संदेश: अनुरोधित संसाधन http विधि "PUT" का समर्थन नहीं करता है। मुझे पुट क्रिया को स्पष्ट रूप से स्वीकार क्यों करना है?

मैं क्योंकि पोस्ट के साथ कुछ इसी तरह बस ठीक काम करता है सिर्फ संदेह में हूँ (मैं स्वीकार किए जाते हैं क्रियाएं निर्दिष्ट करने के लिए नहीं है):

[POST("api/v1/tokens")] 
public MemoryToken CreateToken() 
{...} 

विभिन्न अन्य पदों मेरा मानना ​​है कि यह सेटिंग के साथ क्या करना है से मेरे web.config में। वेब सर्वर अनुभाग वर्तमान में इस तरह दिखता है:

<system.webServer> 
<validation validateIntegratedModeConfiguration="false" /> 
<modules runAllManagedModulesForAllRequests="true" /> 
<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" /> 
    <add name="AttributeRouting" path="routes.axd" verb="*" type="AttributeRouting.Web.Logging.LogRoutesHandler, AttributeRouting.Web" /> 
</handlers> 

मैं WebDav और सामान को हटाने की तरह नीचे दिए कुछ करने की कोशिश की। लेकिन अब तक कुछ भी काम नहीं किया है (जब तक कि एनोटेशन में पुट क्रिया को स्पष्ट रूप से अनुमति न दें)।

ओह, मैं विजुअल स्टूडियो अंतर्निहित विकास सर्वर का उपयोग कर रहा हूं।

धन्यवाद दोस्तों!

उत्तर

6

इस link में वे पोस्ट विधि को डिफ़ॉल्ट होने के रूप में वर्णित करते हैं यदि कोई भी क्रिया मेल नहीं खाता है। इसलिए यही कारण है कि यह अभी भी आपके CreateToken() विधि के लिए HttpPost विशेषता के बिना काम करता है। AcceptVerbs, HttpDelete, HttpGet, HttpHead, HttpOptions, HttpPatch, HttpPost, या HttpPut:

  • आप एक विशेषता के साथ HTTP विधि निर्दिष्ट कर सकते हैं।
  • अन्यथा, यदि नियंत्रक विधि का नाम "गेट", "पोस्ट", "पुट", "हटाएं", "हेड", "विकल्प" या "पैच" से शुरू होता है, तो सम्मेलन द्वारा कार्रवाई क्रिया का समर्थन करती है HTTP विधि।
  • यदि उपरोक्त में से कोई भी नहीं है, तो विधि POST का समर्थन करती है।
+0

हाय वहाँ, आपके स्पष्टीकरण के लिए धन्यवाद। हां, मुझे पता है कि मैं अनुमत HTTP विधियों को निर्दिष्ट कर सकता हूं (पहला स्निपेट देखें)। और मैंने ऐसा भी सोचा कि अगर मैं सिर्फ "अपडेट टूकेन" से "पुटोकोकन" से अपनी विधि का नाम बदलता हूं (हालांकि यह अच्छा नहीं लगता है), तो मुझे [AcceptVerbs] विशेषता की आवश्यकता नहीं होगी। पर मै करता हू। हो सकता है कि यह विशेषता रूटिंग (मेरी पोस्ट की पहली वाक्य में उल्लिखित) के कारण है। यह वास्तव में एक बड़ा सौदा नहीं है। मैं [AcceptVerbs] विशेषताओं को सेट करने के साथ रह सकता हूं जहां कभी मुझे उनकी आवश्यकता होती है। इतना नहीं होगा। मैं बस उम्मीद कर रहा था कि मैं अपने वेब.कॉन्फिग को थोड़ा सा ट्वीव करके इसे भूल सकता हूं। एक बार फिर धन्यवाद! – Ingmar

+0

@IngmarBode, मैंने आपके लक्षण को पुन: पेश करने की कोशिश की, लेकिन नहीं कर सका - मैंने विधि नाम को पुट और पुटोकोकन में बदल दिया और यह दोनों मामलों में काम करता था। कृपया पुनः प्रयास करें और इस उत्तर को स्वीकार करने पर विचार करें। –

संबंधित मुद्दे