2008-12-09 15 views
5

में खाता आधारित लुकअप मैं एक नई सास सेवा के लिए एएसपी.नेट का उपयोग कर रहा हूं, लेकिन मेरे प्यार के लिए मुझे लगता है कि अधिकांश सास जैसे सबडोमेन के आधार पर खाता लुकअप कैसे करें I अनुप्रयोग (जैसे 37 सिग्नल) करते हैं।एएसपी.NET

उदाहरण के लिए, यदि मैं yourname.mysite.com प्रदान करता हूं, तो मैं सबडोमेन निकालने के लिए एएसपी.नेट (एमवीसी विशेष रूप से) का उपयोग कैसे करूं ताकि मैं सही टेम्पलेट लोड कर सकूं (आपकी कंपनी का नाम और इसी तरह प्रदर्शित)? क्या यह नियमित रूटिंग के साथ किया जा सकता है?

यह सास में एक आम बात प्रतीत होता है इसलिए एएसपी.नेट में ऐसा करने का एक आसान तरीका होना चाहिए; मुझे पता है कि ऐसे प्लगइन्स हैं जो रूबी ऑन रूल्स जैसे अन्य ढांचे के लिए करते हैं।

+0

यदि आप गंभीर रूप से सास एप्लिकेशन बना रहे हैं और आपकी टीम को इस तरह की चीज में कठिनाई हो रही है, तो आपको अपनी भर्ती प्रक्रिया में कोई समस्या है। – MarkR

+0

मेव मार्क, काटना! –

+0

मजाकिया बात यह है कि मेरे पास "टीम" नहीं है - मैं पूछ रहा था कि यह मेरे लिए कैसे करें क्योंकि मेरा सास एप्लिकेशन मेरा एमआईएसवी स्टार्टअप के लिए था। –

उत्तर

3

यह मेरे लिए काम करता है:

//-------------------------------------------------------------------------------------------------------------------------- 
    public string GetSubDomain() 
    { 
     string SubDomain = ""; 

     if (Request.Url.HostNameType == UriHostNameType.Dns) 
      SubDomain = Regex.Replace(Request.Url.Host, "((.*)(\\..*){2})|(.*)", "$2"); 
     if (SubDomain.Length == 0) 
      SubDomain = "www"; 
     return SubDomain; 
    } 

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

उपर्युक्त कोड यह सुनिश्चित करता है कि यह एक पूरी तरह से गठित यूआरएल है (बल्कि, आईपी पते की तुलना में कहें) और सबडोमेन लौटाता है। यह काफी उच्च मात्रा वाले वातावरण में हमारे लिए अच्छा काम करता है।

2

आपको इसे ServerVariables संग्रह से चुनने में सक्षम होना चाहिए, लेकिन पहले आपको सही ढंग से काम करने के लिए आईआईएस और DNS को कॉन्फ़िगर करने की आवश्यकता है। तो आप जानते हैं कि 37 सिग्नल शायद अपाचे या अन्य ओपन सोर्स, यूनिक्स वेब सर्वर का उपयोग करते हैं। अपाचे पर इसे VirtualHosting के रूप में जाना जाता है।

आईआईएस के साथ ऐसा करने के लिए आपको आईआईएस (application.mysite.com) में आपके आवेदन को इंगित करने वाले प्रत्येक डोमेन के लिए एक नई DNS प्रविष्टि (application.mysite.com पर एक सीएनएन yourname.mysite.com बनाएं) बनाना होगा।)।

तब आप create a host header entry in the IIS application (application.mysite.com) जो हेडर yourname.mysite.com स्वीकार करेंगे। उपयोगकर्ता वास्तव में application.mysite, com पर हिट करेंगे लेकिन पता कस्टम सबडोमेन है। साइट को कस्टमाइज़ करने के तरीके पर निर्णय लेने के लिए मूल्य प्राप्त करने के लिए आप सर्वरवाराबल्स संग्रह तक पहुंच सकते हैं।

नोट: आवश्यकता के आधार पर आप कई वैकल्पिक कार्यान्वयन कर सकते हैं।

  • एक हार्डवेयर लोड संतुलन पर मेजबान हैडर प्रसंस्करण संभाल (अधिक होने की संभावना 37signals ऐसा करते हैं, की तुलना में वेब सर्वर पर भरोसा करते हैं), और वेब आवेदन करने के लिए पारित करने के लिए एक कस्टम HTTP शीर्षक पैदा करते हैं।
  • प्रत्येक व्यक्तिगत एप्लिकेशन के लिए एक नया वेब एप्लिकेशन और होस्ट हेडर बनाएं। यह शायद बड़ी संख्या में उपयोगकर्ताओं के लिए एक अक्षम कार्यान्वयन है, लेकिन कुछ लोगों के लिए बेहतर अलगाव और सुरक्षा प्रदान कर सकता है।
0

जिस तरह से मैंने इसे किया है, वह HttpContext.Request.ServerVariables ["HTTP_HOST"] के साथ है। विभाजन ("।")।

अगर आपको और सहायता चाहिए तो मुझे बताएं।

1

आपको वाइल्डकार्ड सबडोमेन का समर्थन करने के लिए अपने DNS को कॉन्फ़िगर करने की आवश्यकता है।यह इस तरह से, आपके आईपी पते के लिए एक एक रिकॉर्ड की ओर इशारा करते जोड़कर किया जा सकता है:

* A 1.2.3.4 

एक बार अपनी किया, जो कुछ भी आप टाइप आपके डोमेन अपने रूट डोमेन है, जहां आप विभाजित करके प्राप्त कर सकते हैं पर भेज दिया जाएगा से पहले HTTP_HOST सर्वर चर, उपयोगकर्ता Buggs की तरह ऊपर कहा:

string user = HttpContext.Request.ServerVariables["HTTP_HOST"].Split(".") 

//use the user variable to query the database for specific data 

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