ASP.NET'te geçerli etki alanı adı nasıl alınır


84

Güncel alan adını asp.net c # 'da almak istiyorum.

Bu kodu kullanıyorum.

string DomainName = HttpContext.Current.Request.Url.Host;

URL'm localhost:5858ancak yalnızca geri dönüyor localhost.

Şimdi, projemi localhost'ta kullanıyorum. 5858 localhost almak istiyorum.

Başka bir örnek için, bu alanı kullandığımda

www.somedomainname.com

Elde etmek istiyorum somedomainname.com

Lütfen bana mevcut alan adını nasıl alacağım konusunda bir fikir verin.


1
Ana bilgisayar adı ve alan adı 2 farklı şeydir. Belirli IP adresinize veya üzerinde çalıştığı makinenin ana bilgisayar adına eşlenmiş bir etki alanı mı istiyorsunuz?
Rob Goodwin


var base_url = "@ Request.Url.GetLeftPart (UriPartial.Authority) @ Url.Content (" ~ / ")"
Prince Prasad

Yanıtlar:


81

Kullanımı Request.Url.Hostuygundur - Host:HTTP isteğinin Kaynak-yolu kısmı ana bilgisayar adını içermediğinden, UA'nın (tarayıcının) istediği ana bilgisayar adını (etki alanı adı) belirten HTTP başlığının değerini nasıl alırsınız .

Bunun localhost:5858bir etki alanı adı olmadığını, ana bilgisayar adını ve TCP bağlantı noktası numarasını içeren bir "yetki" olarak da bilinen bir uç nokta belirticisi olduğunu unutmayın . Bu erişilerek alınır Request.Uri.Authority.

Ayrıca, elde etmek geçerli değil somedomain.comgelen www.somedomain.combir Web sunucusu için farklı bir site yapacak şekilde yapılandırılmalıdır çünkü www.somedomain.comkarşılaştırıldığında somedomain.comkullandığınız olsa emin bu o zaman elle ana bilgisayar adını ayrıştırmak gerekir sizin durumunuzda geçerli olup ancak eğer, String.Split('.')eserleri çimdik.

Web sunucusu (IIS) yapılandırmasının ASP.NET'in yapılandırmasından farklı olduğunu ve ASP.NET'in, altında çalıştığı web sitelerinin ve web uygulamalarının HTTP bağlama yapılandırmasından tamamen habersiz olduğunu unutmayın. Hem IIS hem de ASP.NET'in aynı konfigürasyon dosyalarını ( web.config) paylaşması bir kırmızı ringa balığıdır.


123

URL'nin "sol kısmını" şu şekilde almayı deneyin:

string domainName = HttpContext.Current.Request.Url.GetLeftPart(UriPartial.Authority);

Bu da seni verecektir http://localhost:5858ya https://www.somedomainname.comyerel ya da üretime ister. Parçayı bırakmak istiyorsanız www, IIS'yi bunu yapacak şekilde yapılandırmalısınız, ancak bu başka bir konu.

Elde edilen URL'nin sonunda eğik çizgi olmayacağını unutmayın.


7
Bence en iyi cevap bu olmalı.
Andrew

Bu, ihtiyaçlarım için mükemmel bir şekilde çalıştı. Ancak küçük bir düzeltme: Yetki bölümü talep edilirken, döndürülen dizge sondaki yol sınırlayıcısını içermeyecektir. Böylece:http://localhost:60333
Will

1
var base_url = "@ Request.Url.GetLeftPart (UriPartial.Authority) @ Url.Content (" ~ / ")"
Prince Prasad

1
Bu Asp.Net Core 2.2 üzerinde çalışmıyor gibi görünüyor. 'HttpContext' 'Current' için bir tanım içermiyor ve 'HttpContext' türündeki ilk bağımsız değişkeni kabul eden erişilebilir bir uzantı yöntemi 'Current' bulunamadı (bir kullanma yönergesini veya bir derleme başvurusunu kaçırıyor musunuz?).
Stian

@Stian Görünüşe göre bunu yanıtlayan başka bir gönderi daha var: stackoverflow.com/questions/31243068/… . Bu yanıtlar yalnızca URI kısmına odaklanır.
Arturo Torres Sánchez,

43

İşte Request.RequestUriherkesin referansı için bir ekran görüntüsü ve tüm özellikleri.

görüntü açıklamasını buraya girin


18

Aşağıdaki kodu deneyebilirsiniz:

 Request.Url.Host +
    (Request.Url.IsDefaultPort ? "" : ":" + Request.Url.Port)

6

www.somedomain.com olduğu alanı / ana. Alt alan adı önemli bir kısımdır. www.genellikle sahip olmamakla birbirinin yerine kullanılır, ancak bunun bir kural olarak (varsayılan olarak ayarlanmış olsa bile) ayarlanması gerekir, çünkü bunlar eşdeğer değildir. Gibi başka bir alt alan adı düşünün mx.. Muhtemelen farklı bir hedefi var www..

Buna göre, bu tür şeyler yapmamanızı tavsiye ederim. Bununla birlikte, sorduğun için iyi bir sebebin olduğunu düşünüyorum.

Şahsen, bunun www.için özel kasa öneririm .

string host = HttpContext.Current.Request.Url.GetComponents(UriComponents.HostAndPort, UriFormat.Unescaped);;

if (host.StartsWith("www."))
    return host.Substring(4);
else
    return host;

Aksi takdirde, herhangi bir alt alan adını kesmek istediğinizden% 100 eminseniz, biraz daha karmaşık bir şeye ihtiyacınız olacak.

string host = ...;

int lastDot = host.LastIndexOf('.');

int secondToLastDot = host.Substring(0, lastDot).LastIndexOf('.');

if (secondToLastDot > -1)
    return host.Substring(secondToLastDot + 1);
else
    return host;

Diğer insanların söylediği gibi limana ulaşmak.


1

HttpContext.Current.Request.Url.Host doğru değerleri döndürüyor. Eğer www.somedomainname.com üzerinde çalıştırırsanız, size www.somedomainname.com verecektir. 5858'i de almak istiyorsanız, kullanmanız gerekir

HttpContext.Current.Request.Url.Port 

1

Request.ServerVariablesnesne benim için çalışıyor. Kullanmamak için herhangi bir sebep bilmiyorum.

ServerVariables["SERVER_NAME"]ve ServerVariables["HTTP_URL"]aradığınızı almalısınız


1

Tam nitelikli alan adı almak için aşağıdaki kodu deneyebilirsiniz:

Request.Url.Scheme + System.Uri.SchemeDelimiter + Request.Url.Host

4
Bu kod parçacığı soruyu çözebilirken, bir açıklama eklemek, yayınınızın kalitesini artırmaya gerçekten yardımcı olur. Gelecekte okuyucular için soruyu yanıtlayacağınızı ve bu kişilerin kod önerinizin nedenlerini bilmeyebileceklerini unutmayın.
Dr Rob Lang

1

İşte url'nin adını almanın hızlı ve kolay bir yolu.

            var urlHost = HttpContext.Current.Request.Url.Host;

            var xUrlHost = urlHost.Split('.');
            foreach(var thing in xUrlHost)
            {
                if(thing != "www" && thing != "com")
                {
                    urlHost = thing;
                }
            }

0

Bunu dene:

@ Request.Url.GetLeftPart (UriPartial.Authority)


Bu cevap, bunun neden işe yaradığını açıklamıyor ve aslında mevcut cevaplardan biriyle aynı.
Arturo Torres Sánchez

0

Alt alan adıyla bile MVC'de temel URL almak için www.somedomain.com/subdomain:

var url = $"{Request.Url.GetLeftPart(UriPartial.Authority)}{Url.Content("~/")}";

0

Asp.net core 3.1'de böyle kullanıyorum

 var url =Request.Scheme+"://"+ Request.Host.Value;
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.