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"]
しかし、リソース名にスラッシュが含まれている場合 (もちろん、私はエスケープします)、エスケープされたスラッシュをパスの一部として扱います。
/Resource/Path/To/Resource%2FWith%2FSlashes
path = ["Path", "To", "Resource", "With", "Slashes"]
I expected ["Path", "To", "Resource/With/Slashes"]
ダブル エスケープを試みましたが、ASP.NET がセキュリティ上の理由からダブル エスケープについて文句を言うだけでした。ワームの缶を開けるべきではないと思います。
キャッチオールルートでスラッシュをエスケープしないようにする方法はありますか?