Bagaimana cara mendapatkan url lengkap dari halaman saya di C #


163

Saya harus bisa mendapatkan URL lengkap dari halaman yang saya aktifkan dari kontrol pengguna. Apakah ini hanya masalah menggabungkan sekelompok variabel Permintaan bersama? Kalau begitu yang mana? Atau ada cara yang lebih sederhana?


5
Kepada siapa pun di webfarm berbasis beban .. waspadalah nomor port yang muncul saat menggunakan System.Url: stackoverflow.com/questions/7674850/…
felickz

Jawaban:


155

Saya biasanya menggunakan Request.Url.ToString()untuk mendapatkan url lengkap (termasuk querystring), tidak diperlukan penggabungan.


2
Jika URL berisi '#' maka semua karakter setelah # tidak akan dimasukkan.
Krunal Sisodiya

5
@KrunalSisodiya Saya tidak berpikir bahwa hash URL pernah dikirim ke server, tapi saya bisa saja salah.
travis

Request.Url.ToString()tidak termasuk queryString.
Yogesh Patel

320

Berikut adalah daftar yang biasanya saya rujuk untuk jenis informasi ini:

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

Semoga Anda akan menemukan ini berguna!


1
1) Ada juga Request.RawUrl; 2) Request.Url dapat memberikan pengecualian pada 'jalur yang diminta sangat buruk'.
user2864740

Jawaban yang sangat membantu, tetapi bukankah nomor port harus konsisten untuk menghindari kebingungan (dengan asumsi semua contoh adalah untuk permintaan yang sama? Mis. Otoritas dan Port menyiratkan port 80 tetapi AbsoluteUri berisi port 2000)
Young Bob

Request.QueryStringq=qvaluehanya mengembalikan
Marcel

74
Request.Url.AbsoluteUri

Properti ini melakukan semua yang Anda butuhkan, semua dalam satu panggilan singkat.


6
+1. Ini jawaban terbaik. Harus lebih disukai daripada Request.Url.ToString ().
Todd Menier

10

Untuk itu ASP.NET CoreAnda harus mengejanya:

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

Atau Anda dapat menambahkan pernyataan menggunakan ke tampilan Anda:

@using Microsoft.AspNetCore.Http.Extensions

kemudian

@Context.Request.GetDisplayUrl()

The _ViewImports.cshtmlmungkin tempat yang lebih baik untuk itu@using


1
Terima kasih. Ini membantu!
FlyingV


9

jika Anda memerlukan URL lengkap sebagai segalanya mulai dari http hingga querystring, Anda harus menyatukan variabel-variabel berikut

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

2
Ini tidak memperhitungkan port non-standar (yaitu tidak menggunakan port 80 untuk http)
Spongeboy

1
Anda bisa menggunakan Request.ServerVariables ("SERVER_PORT") untuk deteksi port!
armen

1
Perhatikan bahwa jawaban ini menggunakan sintaks VB.Net. Dalam C #, gunakan Request.ServerVariables ["HTTPS"] misalnya.
jaycer

7

Lebih baik digunakan Request.Url.OriginalStringdaripada Request.Url.ToString()(menurut MSDN )


Hanya saja lebih baik jika Anda benar-benar membutuhkan string asli.
Dirk

@DirkThe dari tautan ke MSDN di atas: "String yang dikembalikan oleh metode ToString dapat berisi karakter kontrol, yang dapat merusak keadaan aplikasi konsol. Anda dapat menggunakan metode GetComponents dengan format UriFormat.SafeUnescaped untuk menghapus karakter kontrol dari string yang dikembalikan. . "
Eni

Tepat, dan itu tidak ada hubungannya dengan OriginalString.
Dirk

5

Terima kasih teman-teman, saya menggunakan kombinasi kedua jawaban Anda @Christian dan @Jonathan untuk kebutuhan spesifik saya.

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

Saya tidak perlu khawatir tentang http aman, diperlukan variabel servername dan RawUrl menangani path dari nama domain dan termasuk querystring jika ada.


2
Anda juga harus tahu bahwa RawUrl, tidak seperti Request.Url, mewakili url permintaan asli yang belum dipetakan jika pemetaan url sedang digunakan.
harpo

SERVER_NAME sering tidak mengembalikan URL "asli" yang digunakan oleh klien. HTTP_HOST mungkin merupakan bentuk yang lebih baik jika akan menggali secara langsung .. juga melewatkan HTTP-to-another-port yang sederhana.
user2864740

1

Jika Anda memerlukan nomor port juga, Anda dapat menggunakan

Request.Url.Authority

Contoh:

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

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

1

Coba yang berikut -

var FullUrl = Request.Url.AbsolutePath.ToString();
var ID = FullUrl.Split('/').Last();
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.