Dapatkan url tanpa pertanyaan

189

Saya punya URL seperti ini:

http://www.example.com/mypage.aspx?myvalue1=hello&myvalue2=goodbye

Saya ingin mendapatkannya http://www.example.com/mypage.aspx.

Bisakah Anda memberi tahu saya bagaimana saya bisa mendapatkannya?

Rocky Singh
sumber

Jawaban:

129

Kamu bisa memakai System.Uri

Uri url = new Uri("http://www.example.com/mypage.aspx?myvalue1=hello&myvalue2=goodbye");
string path = String.Format("{0}{1}{2}{3}", url.Scheme, 
    Uri.SchemeDelimiter, url.Authority, url.AbsolutePath);

Atau bisa Anda gunakan substring

string url = "http://www.example.com/mypage.aspx?myvalue1=hello&myvalue2=goodbye";
string path = url.Substring(0, url.IndexOf("?"));

EDIT: Memodifikasi solusi pertama untuk mencerminkan saran brillyfresh di komentar.

Josh
sumber
6
url.AbsolutePath hanya mengembalikan bagian path dari URL (/mypage.aspx); prepend url.Scheme (http) + Uri.SchemeDelimiter (: //) + url.Authority (www.somesite.com) untuk URL lengkap yang Anda inginkan
Ryan
20
Metode Uri.GetLeftPart lebih sederhana seperti yang disebutkan stackoverflow.com/questions/1188096/…
Edward Wilde
The substringMetode akan memberikan kesalahan jika tidak ada string kueri. Gunakan string path = url.Substring(0, url.IndexOf("?") > 0? url.IndexOf("?") : url.Length);sebagai gantinya.
stomy
378

Inilah solusi yang lebih sederhana:

var uri = new Uri("http://www.example.com/mypage.aspx?myvalue1=hello&myvalue2=goodbye");
string path = uri.GetLeftPart(UriPartial.Path);

Dipinjam dari sini: Memotong String Kueri & Mengembalikan URL Bersih C # ASP.net

Johnny Oshika
sumber
17
Satu versi baris:return Request.Url.GetLeftPart(UriPartial.Path);
jp2code
uri.GetComponent(adalah metode hebat lainnya untuk mendapatkan bagian dari Uri. Saya tidak tahu tentang keduanya sampai sekarang!
AaronLS
38

Ini solusi saya:

Request.Url.AbsoluteUri.Replace(Request.Url.Query, String.Empty);
Kolman
sumber
35
Request.RawUrl.Split(new[] {'?'})[0];
tyy
sumber
2
Saya suka ini hanya untuk fakta Anda dapat menggunakannya tanpa uri penuh.
KingOfHypocrites
Perlu diingat bahwa RawUrlakan mendapatkan URL sebelum penulisan ulang URL, jadi mungkin gunakan AbsoluteUri? Request.Url.AbsoluteUri.Split('?')[0]
Pelindung satu
33

Jawaban yang bagus juga ditemukan di sini sebagai sumber jawaban

Request.Url.GetLeftPart(UriPartial.Path)
Abdelfattah Ragab
sumber
16

Jalanku:

new UriBuilder(url) { Query = string.Empty }.ToString()

atau

new UriBuilder(url) { Query = string.Empty }.Uri
Duduk
sumber
Inilah yang saya gunakan untuk proyek NET Core 1.0 karena belum metode Uri.GetLeftPart. Versi terbaru dari NET Core (1.1) harus memiliki metode itu (tidak dapat mengkonfirmasi karena saya tidak menggunakan net core 1.1 untuk saat ini)
psulek
1
Saya suka yang ini karena membangun URI persis seperti apa tujuan UriBuilder. Semua jawaban lainnya adalah peretasan (baik).
Nine Tails
11

Anda dapat menggunakan Request.Url.AbsolutePathuntuk mendapatkan nama halaman, dan Request.Url.Authorityuntuk nama host dan porta. Saya tidak percaya ada properti bawaan untuk memberikan apa yang Anda inginkan, tetapi Anda dapat menggabungkannya sendiri.

Brandon
sumber
1
Itu memberi saya /ype.aspx, bukan apa yang saya inginkan.
Rocky Singh
4

Split () Variasi

Saya hanya ingin menambahkan variasi ini untuk referensi. Url sering berupa string sehingga lebih mudah menggunakan Split()metode ini daripada Uri.GetLeftPart(). Dan Split()juga dapat dibuat untuk bekerja dengan nilai relatif, kosong, dan nol sedangkan Uri melempar pengecualian. Selain itu, Url juga dapat berisi hash seperti/report.pdf#page=10 (yang membuka pdf di halaman tertentu).

Metode berikut berkaitan dengan semua jenis Url ini:

   var path = (url ?? "").Split('?', '#')[0];

Contoh Output:

Roberto
sumber
1
Saya agak kaget karena ini belum mendapatkan upvotes sampai saya sendiri. Ini solusi hebat.
jason
3

Inilah metode ekstensi menggunakan jawaban @ Kolman. Sedikit lebih mudah untuk mengingat untuk menggunakan Path () daripada GetLeftPart. Anda mungkin ingin mengubah nama Path menjadi GetPath, setidaknya sampai mereka menambahkan properti ekstensi ke C #.

Pemakaian:

Uri uri = new Uri("http://www.somewhere.com?param1=foo&param2=bar");
string path = uri.Path();

Kelas:

using System;

namespace YourProject.Extensions
{
    public static class UriExtensions
    {
        public static string Path(this Uri uri)
        {
            if (uri == null)
            {
                throw new ArgumentNullException("uri");
            }
            return uri.GetLeftPart(UriPartial.Path);
        }
    }
}
stevieg
sumber
1
    string url = "http://www.example.com/mypage.aspx?myvalue1=hello&myvalue2=goodbye";
    string path = url.split('?')[0];
Padam Singh
sumber
1

System.Uri.GetComponents, hanya komponen tertentu yang Anda inginkan.

Uri uri = new Uri("http://www.example.com/mypage.aspx?myvalue1=hello&myvalue2=goodbye");
uri.GetComponents(UriComponents.SchemeAndServer | UriComponents.Path, UriFormat.UriEscaped);

Keluaran:

http://www.example.com/mypage.aspx
RainVision
sumber
1
Request.RawUrl.Split('?')[0]

Hanya untuk nama url saja !!

Bhavishya Singh Chauhan
sumber
0

Solusi untuk Silverlight:

string path = HtmlPage.Document.DocumentUri.GetComponents(UriComponents.SchemeAndServer, UriFormat.Unescaped);
Dukun
sumber
0

Saya telah membuat ekstensi sederhana, karena beberapa jawaban lain melempar pengecualian nol jika tidak ada yang QueryStringmemulai dengan:

public static string TrimQueryString(this string source)
{ 
    if (string.IsNullOrEmpty(source))
            return source;

    var hasQueryString = source.IndexOf('?') != -1;

    if (!hasQueryString)
        return source;

    var result = source.Substring(0, source.IndexOf('?'));

    return result;
}

Pemakaian:

var url = Request.Url?.AbsoluteUri.TrimQueryString() 
Sam Jones
sumber
-1

contoh sederhana akan menggunakan substring seperti:

string your_url = "http://www.example.com/mypage.aspx?myvalue1=hello&myvalue2=goodbye";
string path_you_want = your_url .Substring(0, your_url .IndexOf("?"));
Paras
sumber
-1
var canonicallink = Request.Url.Scheme + "://" + Request.Url.Authority + Request.Url.AbsolutePath.ToString();
Pradeep Balaji
sumber
-3
this.Request.RawUrl.Substring(0, this.Request.RawUrl.IndexOf('?'))
Prasad Patil
sumber