ฉันใช้การกำหนดเส้นทางที่รับทั้งหมดกับ 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 ด้วยเหตุผลด้านความปลอดภัย และฉันไม่คิดว่าฉันควรจะเปิดเวิร์มกระป๋องนั้น
มีวิธีใดบ้างที่ฉันจะทำให้เส้นทางที่จับได้ทั้งหมดไม่หลุดพ้นจากเครื่องหมายสแลช