Saya telah mengatur URL yang mirip dengan yang di bawah ini dalam daftar
- http://somesite.com/backup/lol.php?id=1&server=4&location=us
- http://somesite.com/news.php?article=1&lang=en
Saya telah berhasil mendapatkan string kueri menggunakan kode berikut:
myurl = longurl.Split('?');
NameValueCollection qs = HttpUtility.ParseQueryString(myurl [1]);
foreach (string lol in qs)
{
// results will return
}
Tetapi hanya mengembalikan parameter seperti id , server , lokasi dan sebagainya berdasarkan URL yang disediakan.
Yang saya butuhkan adalah menambahkan / menambahkan nilai ke string kueri yang ada.
Misalnya dengan URL:
http://somesite.com/backup/index.php?action=login&attempts=1
Saya perlu mengubah nilai parameter string kueri:
action = login1
upaya = 11
Seperti yang Anda lihat, saya telah menambahkan "1" untuk setiap nilai. Saya perlu mendapatkan satu set URL dari string dengan string kueri yang berbeda di dalamnya dan menambahkan nilai ke setiap parameter di akhir & lagi menambahkannya ke daftar.
sumber
HttpUtility.UrlEncode()
ketika menetapkan nilai parameter?HttpUtility.ParseQueryString
metode mengembalikan implementasi NameValueCollection khusus yang sudah menangani ini di belakang layar ketika Anda menetapkan nilai.Saya telah memasukkan jawaban Darwin ke dalam metode ekstensi yang dapat digunakan kembali.
Saya harap ini membantu!
sumber
Jawaban yang diberikan memiliki masalah dengan Url relatif, seperti "/ some / path /" Ini adalah batasan dari kelas Uri dan UriBuilder, yang agak sulit dimengerti, karena saya tidak melihat alasan mengapa url relatif akan bermasalah. ketika datang ke manipulasi permintaan.
Berikut adalah solusi yang berfungsi untuk jalur absolut dan relatif, ditulis dan diuji dalam .NET 4:
(catatan kecil: ini juga harus bekerja di .NET 4.5, Anda hanya perlu mengubah
propInfo.GetValue(values, null)
kepropInfo.GetValue(values)
)Dan di sini ada serangkaian unit test untuk menguji perilaku:
sumber
uri.AbsoluteUri
daripadauri.ToString()
karena efek buruk yang tidak dapat dihindari.uri.AbsoluteUri
melempar, jika uri tidak mutlak!Catatan Anda dapat menambahkan
Microsoft.AspNetCore.WebUtilities
paket nuget dari Microsoft dan kemudian menggunakan ini untuk menambahkan nilai ke string kueri:sumber
AddQueryString
adalah bahwa ia akan selalu menambahkan, jika sudah ada kunci, itu tidak akan memperbarui, tetapi membuat kunci duplikat, dengan burukSolusi berikut ini berfungsi untuk ASP.NET 5 (vNext) dan menggunakan kelas QueryHelpers untuk membangun URI dengan parameter.
Hasilnya URI akan miliki
http://iberia.com?param1=value1¶m2=value2¶m3=value3
sumber
Akhir semua kesedihan pengeditan string kueri URL
Setelah banyak kerja keras dan mengutak-atik kelas Uri, dan solusi lainnya, inilah metode ekstensi string saya untuk menyelesaikan masalah saya.
sumber
string
untuk mewakili URL seperti ini mengingatUri
kelas sudah ada untuk tujuan itu. Baik gunakan itu, atau buat abstraksi baru jika fitur tidak ada.Saya suka jawaban Bjorn, namun solusi yang diberikannya menyesatkan, karena metode memperbarui parameter yang ada, daripada menambahkannya jika tidak ada .. Untuk membuatnya sedikit lebih aman, saya telah mengadaptasinya di bawah ini.
sumber
query[paramName] = paramValue;
dalam semua kasus. Itu ada, akan ditimpa. Jika tidak ada, kunci akan dibuat.Pendekatan saya sangat sederhana, untuk pemula:
sumber