url asp.net कस्टम एचटीटीपीहैंडलर और यूआरएल रूटिंग




routing httphandler (3)

मैं चाहता हूँ कि मेरे आवेदन "http://example.com/whitepath" पर कस्टम एचटीटीपीहैंडलर द्वारा अनुरोधों को "जेपाथ" के मूल्य के आधार पर वापस लौटाएं।

इसलिए "http://example.com/path1" तक पहुंचने वाले उपयोगकर्ताओं को "http://example.com/path2" तक पहुंचने वाले उपयोगकर्ताओं की तुलना में अलग-अलग प्रतिक्रिया मिल जाएगी, लेकिन दोनों अनुरोध उसी HttpHandler में नियंत्रित किए जाने चाहिए। विचार एक डेटाबेस में "जोपाथ" मिल जाता है और परिणाम के आधार पर, प्रतिक्रिया सामग्री वापस आती है।

मैं यूआरएल रूटिंग के बारे में सुना है और मेरे पास पहले से ही कस्टम एचटीपी हेन्डलर काम कर रहा है, लेकिन मैं क्या जरूरत के लिए दोनों तकनीक को जोड़ सकता हूं?

मैं इस मुद्दे के संबंध में किसी भी टिप्पणी का सम्मान करता हूं।

चीयर्स फ्रैंक हाबिल


तो आपके पास एक क्लास है जो IHttpHandler को लागू IHttpHandler है: MyHandler और यह नामस्थान Example , आपको साइट के वेब में निम्न प्रविष्टियाँ बनाने की आवश्यकता है। Config httpHandlers अनुभाग में:

<httpHandlers>
  <add verb="*" path="*" type="Example.MyHandler"/>
</httpHandlers>

चूंकि यह आपके वेब साइट / एप्लिकेशन को आपके हैंडलर के लिए सभी यूआरएल को पुनर्निर्देशित करता है, इसलिए आपको स्थिर सामग्री (आईएमजीएस, स्क्रिप्ट, स्टाइल शीट इत्यादि) पर विचार करना होगा। एक तरह से ऐसी स्थिर सामग्री को http://example.com/static/... जैसे संगत यूआरएल में स्टोर करना है, तो आप अपने हैंडलर को इस तरह सेट कर सकते हैं:

<httpHandlers>
  <add verb="*" path="*" type="Example.MyHandler"/>
  <add verb="GET,HEAD" path="static/*" type="System.Web.StaticFileHandler" />
</httpHandlers>

अपने स्थानीय देव वेबसर्वर (विजुअल स्टूडियो में एम्बेडेड) के लिए यह आवश्यक है। आईआईएस के लिए, आपको IIS को ये यूआरएलएस से कैसे निपटना है यह बताने की जरूरत है (चूंकि सर्वर पहले इसे एएसपी.नेट या किसी अन्य एक्सटेंशन पर भेजना है या नहीं, यह तय करने के लिए एक अनुरोध का विश्लेषण करता है)।

  • ओपन: आईआईएस प्रबंधक ->
  • अनुभाग: वेबसाइट ->
  • अपनी वेबसाइट पर राइट क्लिक करें ->
  • विकल्प: गुण ->
  • टैब: होम डायरेक्टॉय ->
  • बटन: [कॉन्फ़िगरेशन ...] ->
  • टैब: मैपिंग ->
  • अनुभाग: "वाइल्डकार्ड एप्लिकेशन मैप्स (कार्यान्वयन के क्रम):" ->
  • बटन: [सम्मिलित करें ...] ->
  • निष्पादन योग्य: "C: \ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727 \ aspnet_isapi.dll" (या जो भी संस्करण .NET रनटाइम आपके हैंडलर का उपयोग करता है) ->
  • अनचेक करें "सत्यापित करें कि फ़ाइल मौजूद है" ->
  • बटन: [ओके]

अब आईआईएस और एएसपी.नेट दोनों जानते हैं कि आपके URLS से कैसे निपटें।

उपरोक्त दृष्टिकोण का मतलब है कि स्थैतिक फाइलों का अनुरोध करते वक्त, एएसपी.नेट वास्तव में फाइलों की सेवा कर रहा है, न कि आईआईएस - जो कुछ नुकसान ( यहां पर चर्चा की गई है ) की ओर जाता है। आप इस आचरण को ओवरराइड कर सकते हैं (वाइल्डकार्ड मैपिंग को स्थिर निर्देशिका से) एक निर्देशिका में (आईआईएस प्रबंधक में) स्विचिंग करके, वाइल्डकार्ड मैपिंग कथन को हटाकर (ऊपर जोड़ा गया) और एक आवेदन से इसे वापस स्विच कर सकते हैं। वोइला - अपने एएसपी.नेट के जरिए आईआईएस द्वारा स्थिर फ़ाइलें नियंत्रित की जाती हैं


मैं यूआरएल रूटिंग और एचटीटीपी संचालकों के संयोजन की सिफारिश नहीं करता

यह यूआरएल रूटिंग के लिए एक आदर्श काम जैसा लगता है हालांकि, मैं इसके लिए एक HTTP हैंडलर का उपयोग नहीं करेगा

बस एक एएसपीएक्स पृष्ठ पर "~ / CustomData / whateverpass" का नक्शा करें इसके बाद पेज को डाटाबेस से डाटा लोड करना होगा। आखिरकार, यदि डेटा को देखने के लिए तर्क तर्कसंगत है, तो "जोपैथ" क्या है, आप हर बदलाव के लिए अपने तर्क को दोहराना नहीं चाहते हैं। इसके बजाय, आप इसे एक फाइल में मैप करना चाहते हैं जो सभी मामलों के लिए सही डेटा लोड करेगा।

HTTP हैंडलर पूरी तरह से अलग बात हैं और इसका उपयोग इस उद्देश्य के लिए नहीं किया जाना चाहिए। (बीटीडब्लू, मैंने सिर्फ एचटीटीपी संचालकों पर एक लेख प्रकाशित किया है। आप इसे http://www.blackbeltcoder.com/articles/asp/writing-a-custom-http-handler-in-asp-net पर देख सकते हैं)


सबसे पहले, मैं जोनाथन वुड द्वारा पिछली पोस्ट के साथ सहमत था, कि एचटीटीपीहैंडलर के भीतर रूटिंग का उपयोग करना एक अच्छा विचार नहीं है। लेकिन मुझे पूरा यकीन है कि वह वहां मानक एमवीसी रूटिंग की बात कर रहे थे।

कस्टम रूटिंग का उपयोग करने में एक अच्छा तरीका होगा मैंने इसके बारे में एक लेख प्रकाशित किया - HttpHandler के लिए मूल रूटिंग







httphandler