Context.Request.RawUrl返回错误的部分编码的url,我该如何解决?

时间:2010-02-23 10:01:12

标签: c# url query-string urlencode

由于我决定通过查询字符串传递特定记录的id,因此我加密了id(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属性来检索我得到的网址时:

M2vaIbPkOqO6lw4jv+qE/hTrK495ny92uPcLBOJBNcMpg1RUme/vAo6LyKfdp9e

所以问题是它从字符串中删除了一(1)个'/'因此我不能再解密字符串了。

顺便说一下,我已经使用了这个模块好几个月,从未遇到过这个问题。事实证明我第一次有两个(2)'/'(2f%2f)彼此相邻。

拜托,无论如何我可以让Context.Request.RawUrl返回正确的字符串并阻止它剥离一(1)'/'吗?

1 个答案:

答案 0 :(得分:0)

这听起来很像你正在受到URL normalization的影响,请参阅“Remvoing重复斜线”。 *值得一提的是,您的编码示例显示%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>";
}