由于我决定通过查询字符串传递特定记录的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)'/'吗?
答案 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>";
}