ASP.NET จับการกำหนดเส้นทางและการหลบหนีเครื่องหมายทับไปข้างหน้าทั้งหมด

ฉันใช้การกำหนดเส้นทางที่รับทั้งหมดกับ MVC เพื่อจัดเตรียมเส้นทางไปยังทรัพยากรในแอปพลิเคชันของเรา ดูเหมือนว่า:

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

และการกระทำก็เป็นเช่นนั้น

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

การกดปุ่มด้วย URL ที่ดีและเป็นมิตรก็ใช้ได้ดี

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

แต่เมื่อฉันมีชื่อทรัพยากรที่มีเครื่องหมายทับ (ซึ่งแน่นอนว่าเป็น Escape) มันจะถือว่าเครื่องหมายทับที่ Escape เป็นส่วนหนึ่งของเส้นทาง

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

ฉันพยายาม double escaping เพียงเพื่อให้ ASP.NET บ่นเกี่ยวกับการ double-escaping ด้วยเหตุผลด้านความปลอดภัย และฉันไม่คิดว่าฉันควรจะเปิดเวิร์มกระป๋องนั้น

มีวิธีใดบ้างที่ฉันจะทำให้เส้นทางที่จับได้ทั้งหมดไม่หลุดพ้นจากเครื่องหมายสแลช


person XwipeoutX    schedule 31.10.2013    source แหล่งที่มา
comment
ฉันเดาว่าคุณจะต้องใช้การเข้ารหัสอื่นสำหรับเครื่องหมายทับซึ่งไม่ได้เป็นส่วนหนึ่งของเส้นทาง ตัวอย่างเช่น ใช้เครื่องหมายทับคู่ จากนั้นรวมส่วนของผลลัพธ์แบบแยกซึ่งคั่นด้วยองค์ประกอบว่าง เป็นเพียงความคิดที่บังเอิญ...   -  person jbl    schedule 31.10.2013
comment
ฉันคิดว่า IIS เป็นหนึ่งในการถอดรหัส URL   -  person LostInComputer    schedule 31.10.2013
comment
ดูเหมือนว่าการหลบหนีโดยการเสแสร้งไม่ทำงานเช่นกัน URL ที่มี /Path/To/Resource//With//Doubled//Slashes จะถูกเปลี่ยนเป็น /Path/To/Resource/With/Doubled/Slashes เมื่อถึงเวลาที่คำขอมาถึง ASP.NET แต่ฉันคิดว่าแนวคิดนี้จะใช้ได้กับตัวละครอื่น   -  person XwipeoutX    schedule 06.11.2013