मुझे साइट का आधार कैसे मिल सकता है?


183

मैं थोड़ा सहायक विधि लिखना चाहता हूं जो साइट का आधार URL लौटाता है। मैंने ये ढूंढ निकाला:

public static string GetSiteUrl()
{
    string url = string.Empty;
    HttpRequest request = HttpContext.Current.Request;

    if (request.IsSecureConnection)
        url = "https://";
    else
        url = "http://";

    url += request["HTTP_HOST"] + "/";

    return url;
}

क्या इसमें कोई गलती है, जिसे आप सोच सकते हैं? क्या कोई इस पर सुधार कर सकता है?



जवाबों:


324

इसे इस्तेमाल करे:

string baseUrl = Request.Url.Scheme + "://" + Request.Url.Authority + 
    Request.ApplicationPath.TrimEnd('/') + "/";

13
यह एकमात्र उत्तर है जो मैंने पाया है कि उस मामले से संबंधित है, जहां एक साइट एक एप्लिकेशन जो IIS में एक शीर्ष स्तर की वेबसाइट का एक बच्चा है।
जॉन

6
string.Format ("{0} {1} /", Request.Url.GetLeftPart (UriPartial.Authority), Request.ApplicationPath.TrimEnd ('/') '
diegohb

2
Request.Url.Scheme हमेशा काम नहीं करता है जब आपके पास आंतरिक रूप से HTTP कॉन्फ़िगर और SSL समाप्ति सर्वर पर आंतरिक रूप से https के लिए सेट अप होता है, लेकिन https * बाहर चल रहा है। इसके आस-पास जाने के लिए, मैंने बस एक वेबसाइट "http" या "https" के मान के साथ एक विशिष्ट AppSetting Key "UrlScheme" बनाया, जहां वेबसाइट निवास करती है। Web.config में यह सेटिंग configurationManager.AppSettings ["कुंजी"] द्वारा एक्सेस की जा सकती है
बेन सीयर्ड्स

3
यह खाता लोड संतुलन में नहीं लेता है, जहां डिक्रिप्शन होता है, या आगे की ओर। आप इसका उपयोग करके एक गलत पते के साथ समाप्त कर सकते हैं, इसलिए सावधान रहें और पता करें कि आपकी वेबसाइट को कहां तैनात किया गया था।
कॉनर गलाघेर

$ "{System.Web.HttpContext. Current.Request.Url.GetLeftPart (UriPartial.Authority)} {System.Web.HttpContext.Cur rent.Request.ApplicationPath .TrimEnd ( '/')?} /";
रेयान पेनफोल्ड ने

166
string baseUrl = Request.Url.GetLeftPart(UriPartial.Authority)

बस ;)


25
यह वर्चुअल या एप्लिकेशन पाथ के लिए काम नहीं करता है। आपको बाएं हिस्से के अलावा Request.ApplicationPath का उपयोग करना चाहिए।
करामाती

आधार url httpx: //domain.com: [पोर्ट] है / आपको इस समाधान के लिए ऐप पथ को स्वयं जोड़ना होगा
पावेल किओच

9

दुर्भाग्य GetLeftPartसे पीसीएल संस्करण में लोकप्रिय समाधान का समर्थन नहीं किया गया है UriGetComponentsहालाँकि, यदि आपको पोर्टेबिलिटी की आवश्यकता है, तो यह चाल करना चाहिए:

uri.GetComponents(
    UriComponents.SchemeAndServer | UriComponents.UserInfo, UriFormat.Unescaped);

6

मेरा मानना ​​है कि ऊपर दिए गए उत्तर इस बात पर विचार नहीं करते हैं कि साइट वेबसाइट के मूल में नहीं है।

यह WebApi नियंत्रक के लिए है:

string baseUrl = (Url.Request.RequestUri.GetComponents(
                    UriComponents.SchemeAndServer, UriFormat.Unescaped).TrimEnd('/') 
                 + HttpContext.Current.Request.ApplicationPath).TrimEnd('/') ;

एक नियंत्रक उपयोग कॉन्फ़िगरेशन के भीतर से.वार्षिकPathRoot के रूप में यह स्वतंत्र होस्ट है।
डारेल मिलर

5

मेरे लिए, @ warlock का यहाँ अब तक का सबसे अच्छा जवाब लग रहा है, लेकिन मैंने हमेशा अतीत में इसका उपयोग किया है;

string baseUrl = Request.Url.GetComponents(
    UriComponents.SchemeAndServer, UriFormat.UriEscaped)   

या एक वेबएपीआई नियंत्रक में;

string baseUrl = Url.Request.RequestUri.GetComponents(
    UriComponents.SchemeAndServer, UriFormat.Unescaped)

जो आसान है ताकि आप चुन सकें कि आपको कौन सा भागने का प्रारूप चाहिए। मुझे स्पष्ट नहीं है कि इस तरह के दो अलग-अलग कार्यान्वयन क्यों हैं, और जहां तक ​​मैं बता सकता हूं, इस पद्धति और @ warlock के इस मामले में सटीक एक ही परिणाम है, लेकिन ऐसा लगता है GetLeftPart()कि यह गैर सर्वर के लिए भी काम करेगा mailto, उदाहरण के लिए Uri जैसे टैग ।


उन मामलों के लिए अमान्य url लौटाता है जहाँ आप ngrok सुरंग और https के पीछे हैं
Mohammad Zekrallah

5

यह एक बहुत अधिक मूर्ख सबूत विधि है।

VirtualPathUtility.ToAbsolute("~/");

/यदि आप कुछ एप्लिकेशन डोमेन में होस्ट करते हैं तो @Daniel कॉल वापस नहीं आएगी जैसे कि yourserver / yourapplicationname / yourrootpath
vibs2006

@ vibs2006 एक अस्पष्ट सवाल का एक प्रकार है
डैनियल ए। व्हाइट

4

मुझे जाना है साथ में

HttpContext.Current.Request.ServerVariables["HTTP_HOST"]

1
यह प्रोटोकॉल जोड़ेगा: (HttpContext.Request.ServerVariables ["HTTPS"] == "बंद"? "Http: //": "https: //") + HttpContextxt
.equest.ServerVariables

4

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

String baseUrl = Request.RequestUri.GetLeftPart(UriPartial.Authority) 
+ Configuration.VirtualPathRoot;


1

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

Request.Url.OriginalString.Replace(Request.Url.PathAndQuery, "") + Request.ApplicationPath;
  • Request.Url.OriginalString : ब्राउज़र दिखाते हुए पूरा रास्ता लौटाएं।
  • Request.Url.PathAndQuery : (पूर्ण पथ) - (डोमेन नाम + पोर्ट) लौटाएं।
  • Request.ApplicationPath : होस्ट किए गए सर्वर पर "/" लौटें और स्थानीय IIS पर "एप्लिकेशन नाम" तैनात करें।

इसलिए यदि आप अपने डोमेन नाम का उपयोग करना चाहते हैं, तो निम्नलिखित के मामले में आवेदन नाम को शामिल करने पर विचार करें:

  1. IIS तैनाती
  2. यदि आपका एप्लिकेशन उप-डोमेन पर तैनात है।

====================================

Dev.x.us/web के लिए

यह इस मजबूत पाठ को लौटाता है


0

कृपया नीचे दिए गए कोड का उपयोग करें                           

string.Format("{0}://{1}", Request.url.Scheme, Request.url.Host);

कृपया अपने कोड की व्याख्या करें ताकि अन्य उपयोगकर्ता इसकी कार्यक्षमता को समझ सकें। धन्यवाद!
इग्नासियो आरा


-2

आप संभवतः गैर पोर्ट 80 / एसएसएल के लिए पोर्ट में जोड़ सकते हैं?

कुछ इस तरह:

if (HttpContext.Current.Request.ServerVariables["SERVER_PORT"] != null && HttpContext.Current.Request.ServerVariables["SERVER_PORT"].ToString() != "80" && HttpContext.Current.Request.ServerVariables["SERVER_PORT"].ToString() != "443")
            {
                port = String.Concat(":", HttpContext.Current.Request.ServerVariables["SERVER_PORT"].ToString());
            }

और अंतिम परिणाम में उपयोग करें?


6
Request.Url.Authorityपोर्ट नंबर शामिल करेगा यदि यह गैर-मानक है
Andomar
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.