Context.Request.RawUrl возвращает неверный частично закодированный URL, как я могу это исправить? - PullRequest
3 голосов
/ 23 февраля 2010

Поскольку я решил передать идентификатор конкретной записи через строку запроса, я зашифровал идентификатор (id=090ed4fe-daec-452d-b025-f664dcc1164d) и прикрепил его значение к URL-адресу.

Как мы все знаем, закодированное значение URL для / является% 2f. Таким образом, для конкретного экземпляра приложения значение id (id=090ed4fe-daec-452d-b025-f664dcc1164d), которое было зашифровано и затем закодировано, возвращает значение:

M2vaIbPkOqO6lw4jv%2bqE2f%2fhTrK495ny92uPcLBOJBNcMpg1RUme%2fvAo6LyKfdp9e

При наведении на ссылку я получаю:

M2vaIbPkOqO6lw4jv+qE//hTrK495ny92uPcLBOJBNcMpg1RUme/vAo6LyKfdp9e

для "зашифрованной и закодированной" части, которая является правильной. Но когда я использую свойство Context.Request.RawUrl для получения URL, я получаю:

M2vaIbPkOqO6lw4jv+qE/hTrK495ny92uPcLBOJBNcMpg1RUme/vAo6LyKfdp9e

Так что проблема в том, что он удаляет один (1) '/' из строки, и, следовательно, я больше не могу дешифровать строку.

Кстати, этот модуль у меня уже несколько месяцев, и я никогда не сталкивался с этой проблемой. Просто получается, что у меня впервые два (2) '/' (2f% 2f) рядом друг с другом.

Пожалуйста, могу ли я в любом случае заставить Context.Request.RawUrl вернуть нужную строку и не дать ей снять с себя одну (1) '/'?

1 Ответ

0 голосов
/ 03 ноября 2010

Звучит так, как будто вы страдаете от последствий нормализации URL , см. «Удаление повторяющихся слешей». * Стоит отметить, что ваш кодированный пример показывает %2bqE2f%2f, в котором отсутствует % перед первым 2f. Это уместно?

Тем не менее, я был полностью неспособен воспроизвести вашу проблему (с тестовым примером, который я показываю ниже), так что, возможно, вы могли бы поделиться дополнительной информацией?

WebForm1.aspx (пропуская теги head / body / form для краткости):

<a href="WebForm1.aspx?id=M2vaIbPkOqO6lw4jv+qE//hTrK495ny92uPcLBOJBNcMpg1RUme/vAo6LyKfdp9e">Click!</a>
<a href="WebForm1.aspx?id=M2vaIbPkOqO6lw4jv%2bqE%2f%2fhTrK495ny92uPcLBOJBNcMpg1RUme%2fvAo6LyKfdp9e">Click Encoded!</a>
<br />
<br />
<asp:Label runat="server" ID="myLabel">
</asp:Label>

WebForm1.aspx.cs:

<code>protected void Page_Load(object sender, EventArgs e)
{
    myLabel.Text = "<pre>" + Request.RawUrl + "
"; }
...