Моя проблема очень похожа на: ASP.NET Поймать все маршрутизации и экранировать косые черты , однако это не было ответа для в течение пяти лет.
Я не могу "восстановить" мой catch-all
сегмент URL в ASP.NET Core, если в нем содержится несколько /
и +
символов (в кодировке).
Когда я создаю контроллер API с таким маршрутом, как этот:
[Route("path/{*catchAll}")]
public string Path(string catchAll = null) {
return catchAll;
}
Во-первых, .NET Core отклоняет URL-адрес следующим образом: /path/double%2F%2Fslash%2Bplus
из-за двойного экранирования , для которого я добавляю следующее в web.config.
<requestFiltering allowDoubleEscaping="true" />
Однако значение, возвращаемое для URL-адреса, выглядит следующим образом: /path/double%2F%2Fslash%2Bplus
выводит это:
двойной / слэш + плюс
На самом деле, независимо от того, сколько %2F
экземпляров содержится в URL, все они объединяются в один /
.
Теперь, когда я на самом деле double escape значение типа double%252F%252Fslash%252Bcomment
it одиночного разбора символов /
при двойном разборе символов +
. .. Вывод:
двойной% 2F% 2Fslash + комментарий
Однако я не могу просто декодировать это снова, потому что это даст:
двойной // косой черты комментарий
отсутствует +
символов ...
Есть ли способ в контроллере в ASP.NET Core получить / восстановить значение, используя оба //
вместе с моими +
символами ??