ASP.NET Tangkap semua perutean dan pelolosan garis miring ke depan

Saya menggunakan perutean umum dengan MVC untuk menyediakan jalur ke sumber daya di aplikasi kita. Sepertinya ini:

_routes.MapRoute(null, "Resource/{*resourcePath}", new { 
    controller = "Resource", 
    action = "Open" 
});

Dan aksinya kira-kira seperti itu

public ActionResult Open(string resourcePath) {
    string[] path = resourcePath.Split('/');
}

Menekannya dengan URL yang bagus dan ramah akan berfungsi dengan baik

/Resource/Path/To/Resource  
    path = ["Path", "To", "Resource"]

Tetapi ketika saya memiliki nama sumber daya dengan garis miring ke depan (yang tentu saja saya hindari), ia memperlakukan garis miring yang lolos sebagai bagian dari jalur

/Resource/Path/To/Resource%2FWith%2FSlashes  
    path = ["Path", "To", "Resource", "With", "Slashes"]
    I expected ["Path", "To", "Resource/With/Slashes"]

Saya mencoba melarikan diri ganda, namun ASP.NET mengeluh tentang pelarian ganda karena alasan keamanan, dan saya rasa saya tidak harus membuka kaleng worm tersebut.

Apakah ada cara agar rute umum tidak luput dari tebasan?


person XwipeoutX    schedule 31.10.2013    source sumber
comment
Saya kira Anda harus menggunakan pengkodean lain untuk garis miring yang bukan bagian dari jalur. Misalnya menggunakan garis miring ganda, lalu gabungkan bagian hasil split yang dipisahkan oleh elemen kosong. Tapi hanya pikiran acak...   -  person jbl    schedule 31.10.2013
comment
Saya pikir IIS adalah salah satu decoding URL   -  person LostInComputer    schedule 31.10.2013
comment
Sepertinya melarikan diri dengan menggandakan juga tidak berhasil, URL dengan /Path/To/Resource//With//Doubled//Slashes diubah menjadi /Path/To/Resource/With/Doubled/Slashes pada saat permintaan muncul ASP.NET, tapi menurut saya idenya akan berhasil dengan beberapa karakter lain   -  person XwipeoutX    schedule 06.11.2013