Ben C # olduğum sayfanın tam url nasıl alabilirim


163

Bir kullanıcı denetiminden bulunduğum sayfanın tam URL'sini alabilmem gerekiyor. Bu sadece bir grup İstek değişkenini bir araya getirmek midir? Öyleyse hangileri? Yoksa daha basit bir yol var mı?


6
Loadbalanced webfarm'daki herkes için System.Url kullanırken görünen port numarasına dikkat edin: stackoverflow.com/questions/7674850/…
felickz

Yanıtlar:


155

Genellikle Request.Url.ToString()tam url (querystring dahil) almak için kullanın , birleştirme gerekli.


2
URL '#' içeriyorsa, # işaretinden sonraki tüm karakterler dahil edilmez.
Krunal Sisodiya

5
@KrunalSisodiya Bir URL'nin karmasının sunucuya gönderildiğini düşünmüyorum, ama yanılmış olabilirim.
travis

1
Request.Url.ToString(), queryString içermez.
Yogesh Patel

320

Bu tür bilgiler için normalde başvurduğum bir liste:

Request.ApplicationPath :   /virtual_dir
Request.CurrentExecutionFilePath :  /virtual_dir/webapp/page.aspx
Request.FilePath :  /virtual_dir/webapp/page.aspx
Request.Path :  /virtual_dir/webapp/page.aspx
Request.PhysicalApplicationPath :   d:\Inetpub\wwwroot\virtual_dir\
Request.QueryString :   /virtual_dir/webapp/page.aspx?q=qvalue
Request.Url.AbsolutePath :  /virtual_dir/webapp/page.aspx
Request.Url.AbsoluteUri :   http://localhost:2000/virtual_dir/webapp/page.aspx?q=qvalue
Request.Url.Host :  localhost
Request.Url.Authority : localhost:80
Request.Url.LocalPath : /virtual_dir/webapp/page.aspx
Request.Url.PathAndQuery :  /virtual_dir/webapp/page.aspx?q=qvalue
Request.Url.Port :  80
Request.Url.Query : ?q=qvalue
Request.Url.Scheme :    http
Request.Url.Segments :  /
    virtual_dir/
    webapp/
    page.aspx

Umarım bunu faydalı bulacaksınız!


1
1) Ayrıca Request.RawUrl vardır; 2) Request.Url 'çok kötü istenen yollar' için bir istisna atabilir.
user2864740

Çok yanıtı faydalı, ancak bağlantı noktası numaraları karışıklığı önlemek için tutarlı olmamalıdır (tüm örnekler aynı istek için olduğunu varsayarak, örneğin, Yetki ve Liman port 80 ima ancak AbsoluteUri port 2000 içermektedir?)
Genç Bob

Request.QueryStringq=qvalueyalnızca döner
Marcel

74
Request.Url.AbsoluteUri

Bu özellik, ihtiyacınız olan her şeyi tek bir özlü çağrıda yapar.


6
+1. Bu en iyi cevap. Request.Url.ToString () yerine tercih edilmelidir.
Todd Menier

10

Çünkü ASP.NET Corehecelemeniz gerekecek:

@($"{Context.Request.Scheme}://{Context.Request.Host}{Context.Request.Path}{Context.Request.QueryString}")

Veya görünümünüze bir kullanım ifadesi ekleyebilirsiniz:

@using Microsoft.AspNetCore.Http.Extensions

sonra

@Context.Request.GetDisplayUrl()

Bunun _ViewImports.cshtmliçin daha iyi bir yer olabilir@using


1
Teşekkürler. Bu yardımcı oldu!
FlyingV


9

http'den sorgu dizesine kadar her şey için tam URL'ye ihtiyacınız varsa, aşağıdaki değişkenleri birleştirmeniz gerekir

Request.ServerVariables("HTTPS") // to check if it's HTTP or HTTPS
Request.ServerVariables("SERVER_NAME") 
Request.ServerVariables("SCRIPT_NAME") 
Request.ServerVariables("QUERY_STRING")

2
Bu standart olmayan bağlantı noktalarını dikkate almaz (yani http için 80 numaralı bağlantı noktasını kullanmaz)
Spongeboy

1
port tespiti için Request.ServerVariables ("SERVER_PORT") kullanabilirsiniz!
armen

1
Bu yanıtın VB.Net sözdizimini kullandığını unutmayın. C # 'da, örneğin Request.ServerVariables ["HTTPS"] kullanın.
jaycer

7

Kullanmak Request.Url.OriginalStringdaha iyidir Request.Url.ToString()( MSDN'ye göre )


Sadece orijinal dizeye gerçekten ihtiyacınız varsa daha iyidir.
Dirk

@DirkThe MSDN'den yukarıdaki bağlantıya: "ToString yöntemi tarafından döndürülen dize, bir konsol uygulamasının durumunu bozabilecek denetim karakterleri içerebilir. Döndürülen dizeden denetim karakterlerini kaldırmak için GetComponents yöntemini UriFormat.SafeUnescaped biçiminde kullanabilirsiniz. ."
Eni

Kesinlikle ve bununla hiçbir ilgisi yok OriginalString.
Dirk

5

Teşekkürler çocuklar, özel ihtiyacım için hem cevaplarınız @Christian hem de @Jonathan'ın bir kombinasyonunu kullandım.

"http://" + Request.ServerVariables["SERVER_NAME"] +  Request.RawUrl.ToString()

Güvenli http hakkında endişelenmenize gerek yok, sunucuadı değişkeni gerekli ve RawUrl etki alanı adından yolu işler ve varsa sorgu dizesi içerir.


2
Ayrıca, urU eşlemesi kullanılıyorsa, RawUrl öğesinin Request.Url'den farklı olarak orijinal, eşlenmemiş istek URL'sini temsil ettiğini de bilmelisiniz.
harpo

SERVER_NAME genellikle istemci tarafından kullanılan "gerçek" URL'yi döndürmez. HTTP_HOST doğrudan doğrudan girecekse daha iyi bir formdur. Ayrıca basit HTTP-başka bir bağlantı noktasını da kaçırır.
user2864740

1

Bağlantı noktası numarasına da ihtiyacınız varsa,

Request.Url.Authority

Misal:

string url = Request.Url.Authority + HttpContext.Current.Request.RawUrl.ToString();

if (Request.ServerVariables["HTTPS"] == "on")
{
    url = "https://" + url;
}
else 
{
    url = "http://" + url;
}

1

Takip etmeyi dene -

var FullUrl = Request.Url.AbsolutePath.ToString();
var ID = FullUrl.Split('/').Last();
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.