Saya ingin mengurai string seperti p1=6&p2=7&p3=8
menjadi NameValueCollection
.
Apa cara paling elegan untuk melakukan ini ketika Anda tidak memiliki akses ke Page.Request
objek?
.net
parsing
query-string
Nathan Smith
sumber
sumber
HttpUtility.ParseQueryString
akan menjadi rekomendasi saya kecuali bahwa dalam kasusHttpUtility.ParseQueryString("&X=1&X=2&X=3")
hasilnya adalah....X=1,2,3...
Memiliki beberapa params dengan nama yang sama tidak umum tetapi diperlukan untuk mendukung parameter pengontrol seperti int [], IEnumerable <int> dll (param tersebut dapat digunakan untuk mendukung beberapa kotak centang) lihat "Beberapa kemunculan variabel string kueri yang sama dikonsolidasikan dalam satu entri" sesuai situs MS . Versi buatan tangan dari metode ini mungkin satu-satunya pilihan AndaHttpUtility.ParseQueryString akan bekerja selama Anda berada di aplikasi web atau tidak keberatan termasuk ketergantungan pada System.Web. Cara lain untuk melakukan ini adalah:
sumber
?foo=1&bar
.HttpUtility
akan menguraikannya sebagai{ key = null, value = "bar" }
Banyak jawaban yang memberikan contoh khusus karena ketergantungan jawaban yang diterima pada System.Web . Dari paket NuGet Microsoft.AspNet.WebApi.Client ada UriExtensions.ParseQueryString , metode yang juga dapat digunakan:
Jadi, jika Anda ingin menghindari ketergantungan System.Web dan tidak ingin menjalankannya sendiri, ini adalah opsi yang baik.
sumber
Saya ingin menghapus ketergantungan pada System.Web sehingga saya dapat mengurai string kueri penyebaran ClickOnce, sementara prasyaratnya terbatas pada "Subset Kerangka Kerja Khusus Klien".
Saya menyukai jawaban rp. Saya menambahkan beberapa logika tambahan.
sumber
Saya membutuhkan fungsi yang sedikit lebih fleksibel daripada apa yang sudah disediakan saat bekerja dengan permintaan OLSC.
Ini solusinya:
Mungkin bukan ide yang buruk
<Extension()>
untuk memperbaikinya juga untuk menambah kemampuan Uri itu sendiri.sumber
Untuk melakukannya tanpa
System.Web
, tanpa menulis sendiri, dan tanpa paket NuGet tambahan:System.Net.Http.Formatting
using System.Net.Http;
Gunakan kode ini:
https://msdn.microsoft.com/en-us/library/system.net.http.uriextensions(v=vs.118).aspx
sumber
Jika Anda ingin menghindari ketergantungan pada System.Web yang diperlukan untuk menggunakan HttpUtility.ParseQueryString , Anda bisa menggunakan
Uri
metode ekstensi yangParseQueryString
ditemukan diSystem.Net.Http
.Pastikan untuk menambahkan referensi (jika Anda belum) ke
System.Net.Http
dalam proyek Anda.Perhatikan bahwa Anda harus mengonversi badan respons ke valid
Uri
agarParseQueryString
(inSystem.Net.Http
) berfungsi.sumber
sumber
Saya baru menyadari bahwa Web API Client memiliki
ParseQueryString
metode ekstensi yang berfungsi padaUri
dan mengembalikanHttpValueCollection
:sumber
Cukup akses Request.QueryString. AllKeys disebut sebagai jawaban lain hanya memberi Anda berbagai kunci.
sumber
HttpUtility.ParseQueryString(Request.Url.Query)
return adalahHttpValueCollection
(kelas internal). Itu mewarisi dariNameValueCollection
.sumber
Jika Anda tidak menginginkan ketergantungan System.Web, cukup tempel kode sumber ini dari kelas HttpUtility.
Saya baru saja mencabut ini bersama-sama dari kode sumber Mono . Ini berisi HttpUtility dan semua dependensinya (seperti IHtmlString, Helpers, HttpEncoder, HttpQSCollection).
Lalu gunakan
HttpUtility.ParseQueryString
.https://gist.github.com/bjorn-ali-goransson/b04a7c44808bb2de8cca3fc9a3762f9c
sumber
Karena semua orang sepertinya menempelkan solusinya .. ini milik saya :-) Saya membutuhkan ini dari dalam perpustakaan kelas tanpa
System.Web
mengambil parameter id dari hyperlink yang tersimpan.Saya pikir saya akan berbagi karena saya menemukan solusi ini lebih cepat dan lebih tampan.
Pemakaian:
sumber
Tekan Request.QueryString.Keys untuk NameValueCollection dari semua parameter string kueri.
sumber
Untuk mendapatkan semua nilai Querystring coba ini:
sumber
sumber
sumber
Saya menerjemahkan ke versi C # josh-brown di VB
sumber
Ini kode saya, saya pikir ini sangat berguna:
sumber