3

クエリ文字列を介して特定のレコードの ID を渡すことにしたので、ID ( id=090ed4fe-daec-452d-b025-f664dcc1164d) を暗号化し、その値を URL に添付しました。

/ の URL エンコード値は %2f であることは周知のとおりです。したがって、アプリケーションの特定のインスタンスでは、id=090ed4fe-daec-452d-b025-f664dcc1164d暗号化されてからエンコードされた id 値 ( ) が値を返します。

M2vaIbPkOqO6lw4jv%2bqE2f%2fhTrK495ny92uPcLBOJBNcMpg1RUme%2fvAo6LyKfdp9e

リンクにカーソルを合わせると、次のようになります。

M2vaIbPkOqO6lw4jv+qE//hTrK495ny92uPcLBOJBNcMpg1RUme/vAo6LyKfdp9e

正しい「暗号化およびエンコード」部分。しかし、Context.Request.RawUrlプロパティを使用して URL を取得すると、次のようになります。

M2vaIbPkOqO6lw4jv+qE/hTrK495ny92uPcLBOJBNcMpg1RUme/vAo6LyKfdp9e

問題は、文字列から「/」を1つ削除するため、文字列を復号化できなくなることです。

ところで、私はこのモジュールを何ヶ月も使用していますが、この問題に遭遇したことはありません。初めて2つの '/'(2f%2f) が隣接していることがわかりました。

とにかくContext.Request.RawUrl、正しい文字列を返して、1つの「/」をストライピングしないようにすることはできますか?

4

1 に答える 1

0

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:

protected void Page_Load(object sender, EventArgs e)
{
    myLabel.Text = "<pre>" + Request.RawUrl + "</pre>";
}
于 2010-11-03T15:08:53.467 に答える