Lebih
Dapatkan URL Absolut dari jalur Relatif (metode refactored)
Saya sangat terkejut bahwa tidak ada metode .NET asli untuk mendapatkan url absolut dari url relatif. Saya tahu hal ini telah dibahas berkali-kali, tetapi tidak pernah menemukan metode yang memuaskan yang menangani hal ini dengan baik. Dapatkah Anda membantu menyempurnakan metode di bawah ini?
Saya pikir yang saya perlukan hanyalah memilih protokol secara otomatis, bukan hard coding (http/https). Adakah hal lain yang saya lewatkan (peringatan, kinerja, dll)?
public static string GetAbsoluteUrl(string url)
{
//VALIDATE INPUT FOR ALREADY ABSOLUTE URL
if (url.StartsWith("http://", StringComparison.OrdinalIgnoreCase)
|| url.StartsWith("https://", StringComparison.OrdinalIgnoreCase))
{
return url;
}
//GET PAGE REFERENCE FOR CONTEXT PROCESSING
Page page = HttpContext.Current.Handler as Page;
//RESOLVE PATH FOR APPLICATION BEFORE PROCESSING
if (url.StartsWith("~/"))
{
url = page.ResolveUrl(url);
}
//BUILD AND RETURN ABSOLUTE URL
return "http://" + page.Request.ServerVariables["SERVER_NAME"] + "/"
+ url.TrimStart('/');
}
56
3
Dengan ASP.NET, Anda perlu mempertimbangkan titik referensi untuk "relative URL" - apakah itu relatif terhadap permintaan halaman, kontrol pengguna, atau jika itu "relative" hanya berdasarkan penggunaan "~/"?
Kelas
Uri
berisi cara sederhana untuk mengkonversi URL relatif ke URL absolut (diberikan URL absolut sebagai titik referensi untuk URL relatif):Jika
relativeUrl
sebenarnya adalah URL abolute, makaabsoluteUrl
diabaikan.Satu-satunya pertanyaan yang tersisa adalah apa titik referensinya, dan apakah "~/" URL diperbolehkan (konstruktor
Uri
tidak menerjemahkannya).Masih belum ada yang cukup bagus menggunakan barang asli. Inilah yang akhirnya saya dapatkan:
periksa kode berikut untuk mengambil Url absolut:
Semoga bermanfaat.