【问题标题】:Context.Request.RawUrl returns a wrong partially encoded url, how can I fix it?Context.Request.RawUrl 返回错误的部分编码 url,我该如何解决?
【发布时间】:2010-02-23 10:01:11
【问题描述】:

由于我决定通过查询字符串传递特定记录的 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 属性来检索我得到的 url 时:

M2vaIbPkOqO6lw4jv+qE/hTrK495ny92uPcLBOJBNcMpg1RUme/vAo6LyKfdp9e

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

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

请问,我是否可以让Context.Request.RawUrl 返回正确的字符串并阻止它删除一个(1)'/'?

【问题讨论】:

    标签: c# url query-string urlencode


    【解决方案1】:

    听起来很像您正在遭受URL normalization 的影响,请以某种方式查看“删除重复的斜线”。 *值得一提的是,您的编码示例显示%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>";
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-09-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-17
      • 2019-12-12
      相关资源
      最近更新 更多