Saya punya string di .NET yang sebenarnya adalah url. Saya ingin cara mudah untuk mendapatkan nilai dari parameter tertentu.
Biasanya, saya hanya menggunakan Request.Params["theThingIWant"]
, tetapi string ini bukan dari permintaan. Saya dapat membuat Uri
item baru seperti ini:
Uri myUri = new Uri(TheStringUrlIWantMyValueFrom);
Saya dapat menggunakan myUri.Query
untuk mendapatkan string kueri ... tapi kemudian saya harus mencari cara untuk memisahkannya.
Apakah saya kehilangan sesuatu yang jelas, atau apakah tidak ada cara yang dibangun untuk melakukan ini singkat menciptakan semacam regex, dll?
HttpUtility.ParseQueryString(myUri.Query).Get(0)
dan akan mengekstrak parameter pertama. `HttpUtility.ParseQueryString(string)
! Seperti namanya, ini untuk mem-parsing String Kueri, bukan URL dengan parameter kueri. Jika Anda ingin melakukannya, Anda harus membaginya terlebih dahulu dengan?
seperti ini:Url.Split('?')
dan mendapatkan elemen terakhir menggunakan (tergantung pada situasi dan apa yang Anda butuhkan)[0]
atau LINQ'sLast()
/LastOrDefault()
.Ini mungkin yang Anda inginkan
sumber
Berikut alternatif lain jika, karena alasan apa pun, Anda tidak dapat atau tidak ingin menggunakannya
HttpUtility.ParseQueryString()
.Ini dibuat agar agak toleran terhadap string kueri "salah bentuk", yaitu
http://test/test.html?empty=
menjadi parameter dengan nilai kosong. Penelepon dapat memverifikasi parameter jika diperlukan.Uji
sumber
@Andrew dan @CZFox
Saya memiliki bug yang sama dan menemukan penyebabnya menjadi parameter satu sebenarnya:
http://www.example.com?param1
dan bukanparam1
yang diharapkan.Dengan menghapus semua karakter sebelum dan termasuk tanda tanya memperbaiki masalah ini. Jadi pada dasarnya
HttpUtility.ParseQueryString
fungsi ini hanya memerlukan parameter string kueri yang valid yang hanya berisi karakter setelah tanda tanya seperti pada:Solusi saya:
sumber
ParseQueryString
mem-parsing string kueri.Sepertinya Anda harus mengulang nilai
myUri.Query
dan parsing dari sana.Namun saya tidak akan menggunakan kode ini tanpa mengujinya pada sekelompok URL yang rusak. Mungkin rusak pada beberapa / semua ini:
hello.html?
hello.html?valuelesskey
hello.html?key=value=hi
hello.html?hi=value?&b=c
sumber
Anda dapat menggunakan solusi berikut ini untuk berfungsi dengan parameter pertama juga:
sumber
Gunakan .NET Reflector untuk melihat
FillFromString
metodeSystem.Web.HttpValueCollection
. Itu memberi Anda kode yang digunakan ASP.NET untuk mengisiRequest.QueryString
koleksi.sumber
Atau jika Anda tidak tahu URL (untuk menghindari hardcoding, gunakan
AbsoluteUri
Contoh ...
sumber
jika Anda ingin mendapatkan QueryString Anda pada halaman Default. Halaman default berarti url halaman Anda saat ini. Anda dapat mencoba kode ini:
sumber
Ini sebenarnya sangat sederhana, dan itu berhasil untuk saya :)
sumber
Bagi siapa saja yang ingin mengulang semua string kueri dari sebuah string
sumber
sumber
Saya menggunakannya dan itu berjalan dengan sempurna
sumber