Я использую всеобъемлющую маршрутизацию с 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 пожаловался на двойное экранирование из соображений безопасности, и я не думаю, что мне следует открывать эту банку с червями.
Есть ли способ сделать так, чтобы универсальный маршрут не удалял косую черту?