Как передать параметр catch-all (*) url, содержащий значение с символами `+` и `//` в .NET - PullRequest
0 голосов
/ 02 ноября 2018

Моя проблема очень похожа на: 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 получить / восстановить значение, используя оба // вместе с моими + символами ??

...