asp.net mvc HttpPost बनाम एचटीटीपीएजीटी एमवीसी में विशेषताएँ: एचटीटीपी पोस्ट का उपयोग क्यों करें?




asp.net-mvc attributes (4)

इसके लिए आपके पास एक ही नाम का उपयोग करने वाले कई कार्रवाइयां हो सकती हैं, आप एचटीटीपी पीस्ट विशेषता का उपयोग करके चिह्नित कर सकते हैं कि किस विधि को पोस्ट अनुरोध पर संभाला जाता है:

    public ActionResult ContactUs()
    {
        return View();
    }

    [HttpPost]
    public ActionResult ContactUs(ContactUsModel model)
    {
        //do something with model

        return View();
    }

तो हमारे पास [एचटीटीपी पोस्ट] है, जो एक वैकल्पिक विशेषता है मैं समझता हूं कि यह कॉल को प्रतिबंधित करता है, इसलिए यह केवल एक HTTP पोस्ट अनुरोध द्वारा किया जा सकता है। मेरा प्रश्न यह है कि मैं ऐसा क्यों करना चाहूंगा?


जहां तक ​​एचटीटीपीएजीटी और एचटीपीपीओस्ट के लिए सर्वोत्तम प्रथाएं हैं, एचटीटीपी पोस्ट के उपयोग, अद्यतन, और हटाए जाने (डेटा संशोधन) का उपयोग करने के लिए किसी भी वेब डेवलपमेंट में यह अच्छा अभ्यास है। पोस्ट अच्छे हैं, क्योंकि उन्हें एक फॉर्म सबमिशन की आवश्यकता होती है, जो उपयोगकर्ताओं को ईमेल, सामाजिक साइटों, आदि में जहरीले लिंक (जैसे [ https://www.mysite.com/Delete/1] ) पर क्लिक करने से रोकती है और अनजाने में डेटा बदल रही है। यदि आप मूल रूप से बस डेटा पढ़ रहे हैं तो HttpGet महान काम करता है।

अधिक गहन सुरक्षा कारणों के लिए OWASP देखें और सत्यापन टोकन सुरक्षा क्यों बढ़ाता है


निम्नलिखित की कल्पना करें:

[HttpGet]
public ActionResult Edit(int id) { ... }

[HttpPost]
public ActionResult Edit(MyEditViewModel myEditViewModel) { ... }

यह तब तक संभव नहीं होगा जब तक ActionMethodSelectorAttributes HttpGet और HttpGet जहां उपयोग नहीं किया जाता यह संपादन दृश्य बनाने के लिए वास्तव में सरल बनाता है सभी एक्शन लिंक्स बस सही नियंत्रक को वापस कहते हैं। यदि दृश्य मॉडल झूठे पुष्टि करता है, तो आप अभी संपादन दृश्य में फिर से वापस आ जाते हैं।

मैं बोल्ड होगा और कहूँगा कि यह सबसे अच्छा अभ्यास है जब यह एएसपी.नेट एमवीसी में चीजों को हल करने की बात आती है।

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

@थीलाइट ने पूछा कि पोस्ट को पूरा करने के लिए क्या आवश्यक है यह विधि पद के साथ बस एक रूप है।

रेज़र का उपयोग करके, यह कुछ ऐसा दिखाई देगा

@using (Html.BeginForm())
{
    <input type="text" placeholder="Enter email" name="email" />
    <input type="submit" value="Sign Up" />
}

यह निम्न HTML प्रदान करता है:

<form action="/MyController/Edit" method="post">    
    <input type="text" name="email" placeholder="Enter email">
    <input type="submit" value="Sign Up">
</form>

जब फॉर्म सबमिट किया जाता है, तो यह नियंत्रक को एक एचटीपीटी पोस्ट अनुरोध करेगा। HttpPost विशेषता के साथ कार्रवाई अनुरोध संभाल लेंगे।


यह मुख्य रूप से है ताकि आप एक ही नाम के साथ दो क्रियाएं कर सकें, जो कि जीईटी पर प्रयोग किया जाता है और संभवतः यूजर प्रविष्टि के लिए एक फॉर्म और दूसरे को पदों पर इस्तेमाल किया जा रहा है जब उपयोगकर्ता मूल जीईटी द्वारा प्रदर्शित फ़ॉर्म को प्रस्तुत करता है। अगर कार्रवाई इस तरह से भिन्न नहीं होती है, तो अनुरोध को संभालने के लिए कौन-सी कार्रवाई का उद्देश्य है, इसका समाधान करने में असमर्थ होने के कारण त्रुटि उत्पन्न होगी।





http-get