ASP.NET'te kök etki alanı URI'sini nasıl alabilirim?


Yanıtlar:


81

HttpContext.Current.Request.Url size URL ile ilgili tüm bilgileri alabilir. Ve url'yi parçalara ayırabilir.


4
Evet, neden olumsuz oy? Yanıt olarak işaretlenen ve sık sık olumsuz oylanan bir şey görmeyin. : /
Zack

4
Ben de bu cevabı beğenmedim. blesh doğru olanı verdi ve bu cevap olarak işaretlenmeliydi ...
Michal B.

-1 - Request.Url genellikle "/ klasör1 / klasör2" gibi bir url verir ve alanı tamamen hariç tutar.
Justin

4
@ Justin: Request.Url size tüm parçaları sizin için parçalanmış bir Uri nesnesi verir. Size bir ip vermemeli. En azından kullanıyorum .net sürümünde değil
JoshBerke

6
Bu cevap, daha fazla oy alan aşağıdaki cevap gibi çalışmasını sağlayan kod eklenerek geliştirilebilir ...
theJerm

172
string baseUrl = Request.Url.GetLeftPart(UriPartial.Authority);

Uri :: GetLeftPart Yöntemi :

GetLeftPart yöntemi, URI dizesinin en soldaki bölümünü içeren ve parça tarafından belirtilen bölümle biten bir dize döndürür.

UriPartial Numaralandırma :

URI'nin şeması ve yetki bölümleri.


5
URL'yi çözümlemekten çok daha iyi!
Evgenyt

1
bu en iyi cevap! tnx!
AminM

Bu seçilen cevap olmalıdır. Gereksiz çok fazla dize manipülasyonu.
Ghasan

1
Bu yöntemi kullanarak, http: // www.lala.xxx/blah/blah, http: // www.lala.xxx
live-love

+1 Yerel ana bilgisayar üzerinde yaptığım testlerde protokol (http: //) kısmını devre dışı bırakan .Authority ile aynı şey değil.
GGleGrand

122

Hâlâ merak eden herkes için, daha eksiksiz bir cevap http://devio.wordpress.com/2009/10/19/get-absolut-url-of-asp-net-application/ adresinde mevcuttur .

public string FullyQualifiedApplicationPath
{
    get
    {
        //Return variable declaration
        var appPath = string.Empty;

        //Getting the current context of HTTP request
        var context = HttpContext.Current;

        //Checking the current context content
        if (context != null)
        {
            //Formatting the fully qualified website url/name
            appPath = string.Format("{0}://{1}{2}{3}",
                                    context.Request.Url.Scheme,
                                    context.Request.Url.Host,
                                    context.Request.Url.Port == 80
                                        ? string.Empty
                                        : ":" + context.Request.Url.Port,
                                    context.Request.ApplicationPath);
        }

        if (!appPath.EndsWith("/"))
            appPath += "/";

        return appPath;
    }
}

4
Mükemmel çalıştı. Site 8080 / MySiteName sunucusuysa , doğru şekilde alır.
Michael La Voie

2
Başka bir yerdeki bağlantı yerine gerçek kodu paylaştığınız için teşekkür ederiz.
theJerm

2
context.Request.Url.Port == 80 HTTPS içinde sorunlara neden olacak
Evgenyt

7
Dikkat! Https için çalışmaz. Https için değiştirmeniz gerekiyor context.Request.Url.Port == 80 tarafından (context.Request.Url.Port == 80 && context.Request.Url.Scheme == "http") || (context.Request.Url.Port == 443 && context.Request.Url.Scheme == "https")veya kullanım cevap aşağıda
Razon

1
Localhost için de çalışır (yerel olarak test ediyorsanız). Bağlantı noktasına ihtiyacınız yoksa, "http: //" + HttpContext.Current.Request.Url.Host;
CyberHawk

36

Örnek URL http://www.foobar.com/Page1 ise

HttpContext.Current.Request.Url; //returns "http://www.foobar.com/Page1"


HttpContext.Current.Request.Url.Host; //returns "www.foobar.com"


HttpContext.Current.Request.Url.Scheme; //returns "http/https"


HttpContext.Current.Request.Url.GetLeftPart(UriPartial.Authority); //returns "http://www.foobar.com"

1
Hayır hayır. .Hostait "http://www.foobar.com/Page1"olduğunu www.foobar.com, değil foobar.com.
tchelidze

1
evet haklısın, cevabı güncelledi. @tchelidze thanks
Dheeraj Palagiri

27
string hostUrl = Request.Url.Scheme + "://" + Request.Url.Host; //should be "http://hostnamehere.com"

16

İstek URL dizesinin tamamını almak için:

HttpContext.Current.Request.Url

İsteğin www.foo.com kısmını almak için:

HttpContext.Current.Request.Url.Host

ASP.NET uygulamanızın dışındaki faktörlerin insafına bir dereceye kadar bağlı olduğunuzu unutmayın. IIS, uygulamanız için birden çok veya herhangi bir ana bilgisayar üstbilgisini kabul edecek şekilde yapılandırılmışsa, DNS aracılığıyla uygulamanıza çözümlenen etki alanlarından herhangi biri, kullanıcının girdiği URL'ye bağlı olarak İstek URL'si olarak görünebilir.


1
en basit çözüm burada
full_prog_full

4
Match match = Regex.Match(host, "([^.]+\\.[^.]{1,3}(\\.[^.]{1,3})?)$");
string domain = match.Groups[1].Success ? match.Groups[1].Value : null;

host.com => host.com'a
dön s.host.com => host.com'a dön

host.co.uk => host.co.uk'ye dön
www.host.co.uk => host.co.uk'ye geri dön
s1.www.host.co.uk => host.co.uk'ye dön


Bunun eski bir gönderi olduğunun farkındayım, ama güzelce yapılmış NQuenault, Regex İfadelerinde çok iyi yapmıyorum. Tam olarak ihtiyacım olan şey.
JeffreyJ

@nquenault, www.abc.com gibi bir ana bilgisayar adının en iyi nasıl kullanılacağına dair herhangi bir fikriniz var mı? Teşekkürler!
Gary Ewan Park

4

- Bağlantı noktasını eklemek, IIS Express'i çalıştırırken yardımcı olabilir

Request.Url.Scheme + "://" + Request.Url.Host + ":" + Request.Url.Port


3

Bunun daha eski olduğunu biliyorum ama bunu şimdi yapmanın doğru yolu

string Domain = HttpContext.Current.Request.Url.Authority

Bu, bir sunucu için port ile DNS veya ip adresini alacaktır.



1

C # Aşağıdaki Örnek:

string scheme = "http://";
string rootUrl = default(string);
if (Request.ServerVariables["HTTPS"].ToString().ToLower() == "on")
{
  scheme = "https://";
}
rootUrl = scheme + Request.ServerVariables["SERVER_NAME"].ToString();

1
string host = Request.Url.Host;
Regex domainReg = new Regex("([^.]+\\.[^.]+)$");
HttpCookie cookie = new HttpCookie(cookieName, "true");
if (domainReg.IsMatch(host))
{
  cookieDomain = domainReg.Match(host).Groups[1].Value;                                
}

1

Bu, özellikle sorduğunuz şeyi geri verecektir.

Dim mySiteUrl = Request.Url.Host.ToString()

Bunun daha eski bir soru olduğunu biliyorum. Ama aynı basit cevaba ihtiyacım vardı ve bu tam olarak ne sorulduğunu döndürüyor (http: // olmadan).

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.