2010-12-01 8 views
6

मैं अपने आवेदन "http://example.com/whateverpath" एक कस्टम HttpHandler लेकिन "whateverpath" के मूल्य के आधार पर वापसी बातों से करने के लिए अनुरोधों को हैंडल करना चाहते हैं।asp.net कस्टम HttpHandler और यूआरएल मार्ग

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

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

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

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

उत्तर

4

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

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

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

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

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

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

अब दोनों आईआईएस और ASP.NET पता है कि आपके यूआरएल के साथ सौदा करने के लिए कैसे।

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

0

मैं यूआरएल मार्ग और HTTP संचालकों के संयोजन की सलाह नहीं देते।

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

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

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

+0

आप व्याख्या कर सकते हैं "मैं इसके लिए एक HTTP हैंडलर का उपयोग नहीं होता।" - मैं इसके बारे में एक लेख प्रकाशित किया? अब तक मुझे पता है कि HTTP हैंडलर सामान्य एएसपीएक्स पेज से बेहतर प्रदर्शन प्रदान करता है और मुझे HTTP हैंडलर तरीके से कोई नुकसान नहीं दिखता है। –

+0

पेज रूटिंग अधिक सीधे आगे है और अधिक लचीलापन प्रदान करता है। यह आपके द्वारा वर्णित बिल्कुल सही के लिए डिज़ाइन किया गया था। HTTP हैंडलर के लिए तेज़ी से होना संभव है, लेकिन ऐसा इसलिए है क्योंकि एएसपी.नेट पृष्ठों के लिए समर्थन का हिस्सा भाग/लोड नहीं होता है। मैं बस एक कस्टम HTTP हैंडलर लागू करने के माध्यम से मिला है। यह बहुत अच्छा काम करता है। लेकिन मुझे नहीं लगता कि यह आपके द्वारा वर्णित अनुसार सही दृष्टिकोण है। –

+0

आपके उत्तर के लिए धन्यवाद ... क्या आप "सीधे आगे और अधिक लचीलापन प्रदान करते हैं" के साथ आपका क्या मतलब बता सकते हैं? मैं HTTP हैंडलर दृष्टिकोण बहुत आसान और सीधे आगे देखता हूं। इसके अलावा, क्या आप यूआरएल रूटिंग समाधान की तरह दिखने के बारे में अधिक विशिष्ट हो सकते हैं? रुडू वास्तव में उनके जवाब में विस्तृत था। धन्यवाद फिर योनातन। –

0

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

एक अच्छा दृष्टिकोण कस्टम मार्ग का उपयोग करने में किया जाएगा। Basic Routing for HttpHandler