ASP.NET "нормализует" обратную косую черту в путях запросов для пересылки косых черт, и мне нужно, чтобы они проходили как обратные косые черты (они используются для выполнения поиска в базе данных). Я не против, если сбежать вперед - косые черты пройдут как небезопасные, в отличие от этого вопроса.
config.Routes.MapHttpRoute(
name: "TransactionsApi",
routeTemplate: "api/transactions/{*transaction}",
defaults: new { controller = "transactions", transaction = RouteParameter.Optional }
);
Обратите внимание, что я установил транзакцию для соответствия оставшейся части пути.
Я пробовал следующие URL-адреса (как из браузера, так и из Fiddler):
-
api/transactions/mscorlib.pdb\DFA83312EAB84F67BD225058B188F22B1\mscorlib.pdb
-
api/transactions/mscorlib.pdb\\DFA83312EAB84F67BD225058B188F22B1\\mscorlib.pdb
-
api/transactions/mscorlib.pdb%5CDFA83312EAB84F67BD225058B188F22B1%5Cmscorlib.pdb
-
api/transactions/mscorlib.pdb%5C%5CDFA83312EAB84F67BD225058B188F22B1%5C%5Cmscorlib.pdb
К моменту, когда они попали в мой метод Web API, все они mscorlib.pdb/DFA83312EAB84F67BD225058B188F22B1/mscorlib.pdb
. Я проверил текущий HttpContext
, и похоже, что ASP.NET выполняет эту нормализацию (а не MVC4).
Возможные решения:
- При вставке транзакции нормализовать '\' на '/', чтобы независимо от того, какой ASP.NET проходит через поиск, будет успешным. Кажется немного вонючим.
- Base64 часть
{*transaction}
, если она содержит обратную косую черту. Не действительно хакерский адрес-бар
Любая идея о том, как заставить ASP.NET не выполнять эту нормализацию?