2008-08-22 20 views
181

Geçerli protokolü, ana makineyi ve bağlantı noktasını hızlı bir şekilde almak için .NET uygulamasında basit bir yol var mı? Ben aşağıdaki URL kullanıyorsam Örneğin,:.NET - Protokol, ana makine ve bağlantı noktası alın

http://www.mywebsite.com:80/pages/page1.aspx

dönmek gerekir: Ben tam URL almak için Request.Url.AbsoluteUri kullanabileceğini biliyor

http://www.mywebsite.com:80

ve bildiğim Ana bilgisayar ve bağlantı noktası almak için Request.Url.Authority kullanabilir, ancak URL dizesini ayrıştırmadan protokolü almanın en iyi yolundan emin değilim.

Herhangi bir öneriniz var mı?

+0

Request.AbsoluteURI –

+1

bir simlar cevabım bakınız: başarıyla yakaladı

var Uri uri = Context.Request.Url; var host = uri.Scheme + Uri.SchemeDelimiter + uri.Host + ":" + uri.Port; 

burada soru - http://stackoverflow.com/a/1534478/98740 – WDuffy

cevap

138

aşağıdaki (C#) kodu kötü adlı Uri.GetLeftPart() yöntemini kullanarak, bunu yapmak için daha kısa bir yol aslında, orada kandırmasına

Uri uri = new Uri("http://www.mywebsite.com:80/pages/page1.aspx"); 
string requested = uri.Scheme + Uri.SchemeDelimiter + uri.Host + ":" + uri.Port; 
+24

Ya dize istenen = uri.Scheme + Uri.SchemeDelimiter + uri.Authority; – tranmq

+11

Bu, bağlantı noktası olmadığında bile bir ":" ekleyeceğinden yanlış cevaptır. Kullanarak @ Uri.GetLeftPart '@ dthrasher – gman

20

Request.Url, isteğin Uri numarasını döndürecektir. Bunu yaptıktan sonra, istediğin her şeyi alabilirsin. Protokolü almak için Scheme özelliğini çağırın.

Örnek: Bu yardımcı olur

Uri url = Request.Url; 
string protocol = url.Scheme; 

Umut. @Rick Bu soru için kabul cevabı vardır rağmen

339

yapmalıdır.

Uri url = new Uri("http://www.mywebsite.com:80/pages/page1.aspx"); 
string output = url.GetLeftPart(UriPartial.Authority); 

Ancak GetLeftPart() bir catch yoktur. Bağlantı şeması için varsayılan bağlantı noktasıysa, onu dışarı çıkaracaktır. Bağlantı noktası 80, http için varsayılan bağlantı noktası olduğundan, yukarıdaki örneğimde GetLeftPart() çıktısı http://www.mywebsite.com olacaktır.

Bağlantı noktası numarası 80'den başka bir şey olsaydı, sonuçta yer alacaktı. Umarım bu yardımcı olur

var scheme = Request.Url.Scheme; // will get http, https, etc. 
var host = Request.Url.Host; // will get www.mywebsite.com 
var port = Request.Url.Port; // will get the port 
var path = Request.Url.AbsolutePath; // should get the /pages/page1.aspx part, can't remember if it only get pages/page1.aspx 

: Eğer Asp.Net içinde bunu ya HttpContext.Current.Request erişebilir edilir Eh eğer

+10

Bu benim görüşüme göre en iyi örnektir. Localhost için çalışır: port ve canlı örnekler. –

+0

Yerel + kapalı olduğundan çalışır +1; bağlantı noktası –

+8

GetLeftPart - gerçekten, OMG güzel adlandırma. –

46

Bunları bunları almanın daha kolay ve daha genel yollar vardır söyleyebilirim .

+1

Bu yöntemi tercih ediyorum, sadece istediğim eşi bulabilirim ve dize portu almak için yeterince iyi oluşturulmuş olsun ya da olmasın endişelenmenize gerek yok. Bu özelliklerin +1 – Jrud

+0

Bazı daha fazla ayrıntı: http://blog.jonschneider.com/2014/10/systemuri-net-framework-45-visual-guide.html –

23

Bunu elde etmek için daha yapılandırılmış bir yol UriBuilder kullanmaktır. Bu doğrudan dizi manipülasyonunu önler.

var builder = new UriBuilder(Request.Url.Scheme, Request.Url.Host, Request.Url.Port); 
12

bile daha kısa bir yol, yeni ASP.Net gerektirebilir:

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

UriComponents enum Eğer eklemek istediğiniz URI hangi bileşen (ler) belirlemenizi sağlar.

+1

Harika, PCL (.GetLeftPart çalışır çünkü() orada mevcut değildir) – Sascha

7

Holger'ın yanıtına çok benzer.

Uri uri = Context.Request.Url;   
var scheme = uri.Scheme // returns http, https 
var scheme2 = uri.Scheme + Uri.SchemeDelimiter; // returns http://, https:// 
var host = uri.Host; // return www.mywebsite.com 
var port = uri.Port; // returns port number 

Uri class Ben listelemediğim yöntemlerin birçoğu bir dizi sağlar: Eğer böyle bir şey yapabileceği URL'yi kapmak gerekiyorsa.Benim durumda

, ben Port Number birlikte LocalHost kapmak için gerekli, bu nedenle bu ne yaptım: http://localhost:12345

İlgili konular