POST

2012-04-20 22 views
5

पर रूट प्रतिबंध त्रुटि जब आप किसी कार्रवाई में डेटा का उपयोग करते हैं, तो आपको अक्सर एक आईडी को param के रूप में प्राप्त होता है, लेकिन आपको उस आईडी के लिए कुछ त्रुटि प्रबंधन करने की आवश्यकता होती है। प्रत्येक क्रिया के लिए आपको जो करना है, उसे संभालने में से एक यह सुनिश्चित करना है कि आईडी 0 से अधिक हो (ऋणात्मक संख्या न हो)। तो कार्रवाई में इसे संभालने की बजाय, मैं एक मार्ग बाधा जोड़ना चाहता था, इसलिए यदि यह एक नकारात्मक आईडी है तो कार्रवाई के लिए मार्ग नहीं है।POST

यहाँ मेरी कोड है:

//route definition 
     routes.MapRoute(
      "default route" , 
      "{controller}/{action}/{id}" , 
      new { id = UrlParameter.Optional }, 
      new { id = @"^\d+$" } 
     ); 

//action definition (note I also tried with only [HttpPost] and with nothing same result 
     [AcceptVerbs(HttpVerbs.Post | HttpVerbs.Get)] 
     public ActionResult Edit(int id) 

यह सब ठीक काम करता है जब आप एक कार्रवाई पर मिलता है, लेकिन जब मैं मैं निम्न त्रुटि जब यह सिर्फ 404 पेज के पास जाना चाहिए पाने के पोस्ट

HTTP verb POST used to access path '/object/edit/-2' is not allowed. 

[HttpException (0x80004005): The HTTP verb POST used to access path '/object/edit/-2' is not allowed.] 
    System.Web.DefaultHttpHandler.BeginProcessRequest(HttpContext context, AsyncCallback callback, Object state) +740 
    System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +632 
    System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +194 

कोई विचार? शायद एक बेहतर समाधान?

संपादित करें: बस देखा कुछ दिलचस्प, मैं शुरू में सोचा था कि त्रुटि संदेश एक 500 था लेकिन इसका एक 405 है जो "विधि नहीं मिला"

+0

क्या आप कोई यूआरएल पुनर्लेखन कर रहे हैं? आपके अपवाद में पथ मेल नहीं खाते हैं। – Robaticus

+0

कोई खेद नहीं है, क्या मैंने पहले जवाब में उल्लेख किया था, मेरा मतलब है कि दोनों में कार्रवाई और नियंत्रक को प्रतिस्थापित करना है, लेकिन दूसरे मौके को याद किया। वे दोनों मेल खाते हैं। –

+0

मुझे वास्तव में यह नहीं पता कि यह GET पर ठीक क्यों होगा और POST –

उत्तर

1

आप कहते हैं:

HTTP क्रिया पोस्ट इस्तेमाल किया पथ '/ ऑब्जेक्ट/एडिट/-2' तक पहुंचने की अनुमति नहीं है।

हालांकि अपवाद कहता है:

HTTP क्रिया पथ में पहुंचने के लिए इस्तेमाल किया पोस्ट '/ प्रोफ़ाइल/EDITLINK/-2' की अनुमति नहीं है।

संपादित करें:

मैं इससे आपकी समस्या से संबंधित हो सकती है।

हालांकि यह आपके जैसा नहीं है।

+0

पर कोई त्रुटि डालें, क्षमा करें, मैंने त्रुटि की प्रतिलिपि बनाई लेकिन मेरा मतलब दोनों को प्रतिस्थापित करना था, लेकिन दूसरे मौके को याद किया, मेरा बुरा। –

+3

क्या आप इसे किसी प्रश्न के बजाय उत्तर में बदल सकते हैं? – Will

0

कोशिश को हटाने

[AcceptVerbs(HttpVerbs.Post | HttpVerbs.Get)] 

और देखें कि क्या यह सिर्फ काम करता है (आमतौर पर आप [HttpPost] डाल HttpGet इनकार करना आदि होगा)।

+0

आप सही हैं, हालांकि मैंने परीक्षण उद्देश्यों के लिए अभी यह कथन जोड़ा है। –

1

मैं अत्यधिक here पर रूटिंग डीबगर स्थापित करने का सुझाव देता हूं। यह आपको दिखाएगा कि प्रत्येक रूट द्वारा दिए गए यूआरएल को कैसे पार्स किया जा रहा है, ताकि आप देख सकें कि जब आप उस यूआरएल को दबाते हैं तो वास्तव में क्या हो रहा है। यदि आपका मार्ग छोड़ा जा रहा है, तो आप जानते हैं कि आपकी बाधा काम कर रही है, और आप जो कुछ भी पकड़ रहे हैं उस पर ध्यान केंद्रित कर सकते हैं। यदि आपका मार्ग मारा जा रहा है, तो यह कार्रवाई और/या क्रियाओं के साथ एक समस्या है।

साइड नोट: मैं इस डीबगर का 2.0.0.7 संस्करण सही ढंग से काम करने में विफल रहा (अगस्त में वापस), लेकिन लेख में सीधे जुड़े हुए (या NuGet पर 1.0.0.1 संस्करण) ठीक से काम करता है। मुझे लगता है कि NuGet में वर्तमान संस्करण काम कर रहा है, लेकिन यदि नहीं, तो पुराने संस्करण को आजमाएं।

+0

इसे धन्यवाद देने का प्रयास करेगा। –