3

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 がセキュリティ上の理由からダブル エスケープについて文句を言うだけでした。ワームの缶を開けるべきではないと思います。

キャッチオールルートでスラッシュをエスケープしないようにする方法はありますか?

4

0 に答える 0