Parameter penyandian URL di ActionLink?

Saya telah mendaftarkan rute berikut;

        routes.MapRoute(
            "LocationsByArea",                                              
            "Locations/{system}/{storage}/{area}",          
            new { controller = "StorageLocation", action = "Index" },
            null
        );

...dan kode berikut menurut pandangan saya;

<%= Html.ActionLink("Platser", "Index", "StorageLocation", new { system = Model.System, storage = Model.Storage, area = item.Name }, null)%>

Masalah saya adalah ketika "area = item.Name" berisi titik dua, mis. "Wilayah 4:1". Jika saya mengeklik tautan yang diberikan, saya mendapatkan kesalahan HTTP 400, Permintaan buruk. Saya kira saya harus menyandikan parameter area saya dengan cara tertentu, tetapi saya tidak tahu caranya. Bantuan apa pun dihargai.

Terima kasih!


person Erik Z    schedule 30.11.2009    source sumber


Jawaban (3)


Pengodean/dekode bawaan tidak berfungsi, jadi saya sarankan Anda membuat sendiri, seperti ini:

namespace MyProject.Helpers
{
    public static class JobNameHelper
    {
        public static string JobNameEncode(string jobname)
        {
            return jobname.Replace(":", "---colon---");
        }

        public static string JobNameDecode(string jobname)
        {
            return jobname.Replace("---colon---", ":");
        }

    }
}
person Kjensen    schedule 06.09.2010

Bisakah kamu tidak menggunakannya saja

Server.UrlEnconde(item.Name)

Atau apakah saya melewatkan sesuatu?

Dalam perutean Anda, Anda mungkin harus menggunakan Server.UrlDecde juga meskipun menurut saya itu akan memecahkan kode untuk Anda berdasarkan permintaan.

Coba gunakan Routing Debugger untuk melihat urlnya router dilewati, maka Anda dapat melihat di mana decoding perlu dilakukan

person Sheff    schedule 30.11.2009
comment
Saya pikir Anda harus melakukan UrlDecode kembali di ujung yang lain ketika membacanya kembali. Sudahkah Anda mencoba ini? - person Sheff; 30.11.2009
comment
Ya, sudah, tapi saya tidak menjangkau pengontrolnya. - person Erik Z; 30.11.2009
comment
Sepertinya Decoding perlu dilakukan saat perutean, lalu coba debugger perutean (saya telah memperbarui jawabannya) - person Sheff; 30.11.2009

ASP.NET 3.5 SP1 dan yang lebih lama memiliki sejumlah batasan mengenai URL mana yang valid. Di ASP.NET 4 sebagian besar masalah ini telah diperbaiki (atau setidaknya dapat disesuaikan melalui web.config). Saya pikir karakter titik dua, meskipun dikodekan, mungkin tidak diizinkan di ASP.NET 3.5 SP1 dan yang lebih lama karena masalah keamanan. Mengizinkan titik dua dapat menjadi masalah keamanan saat melakukan pemeriksaan file karena ini adalah sintaks yang kurang dikenal untuk Aliran Data Alternatif NTFS.

Saya sarankan mencoba memilih karakter selain titik dua untuk tujuan ini. Mungkin tanda koma, titik koma, atau sama dengan bisa digunakan?

person Eilon    schedule 01.12.2009