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?

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.


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


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);

35
Request.RawUrl.Split(new[] {'?'})[0];

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


16

Jalanku:

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

atau

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

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.


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:


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);
        }
    }
}

1
    string url = "http://www.example.com/mypage.aspx?myvalue1=hello&myvalue2=goodbye";
    string path = url.split('?')[0];

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


0

Solusi untuk Silverlight:

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

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() 

-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("?"));

-1
var canonicallink = Request.Url.Scheme + "://" + Request.Url.Authority + Request.Url.AbsolutePath.ToString();


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.