【问题标题】:Using Request.QueryString, slash (/) is added to the last querystring when it exists in the first querystring使用 Request.QueryString,斜杠 (/) 在第一个查询字符串中存在时添加到最后一个查询字符串
【发布时间】:2011-03-03 19:20:59
【问题描述】:

这是我在 stackoverlow 上的第一篇文章,我在其他任何文章中都找不到解决方案,所以就这样吧:

我有一个在 url 中发送两个查询字符串的网页:

example.aspx?name=<%=name%>&sku=<%=sku%>

然后我使用Request.QueryString["name"];Request.QueryString["sku"]; 收集值

当我查看发送查询字符串的页面源上的 url 时,一切看起来都很好,但如果“名称”包含正斜杠 (/),当我检索时,它会以某种方式被附加到“sku”的末尾查询字符串的值。我试图用 %2F 替换 / 但这不起作用。如果“名称”查询字符串没有斜杠,那么一切看起来都是正确的。

有什么想法吗?

编辑:我最终不得不双重编码(server.urlencode)和双重解码才能正常工作。感谢您的所有帮助!

【问题讨论】:

  • @Zack - 应该使用其他人提到的使用 Server.UrlEncode 修复查询字符串。然而,还有一些事情是错误的。问题的根源是如果name 值有一个正斜杠(/),那么斜杠将被添加到sku 值。您需要查看如何设置 namesku 查询字符串参数,以了解为什么将斜杠添加到 sku

标签: c# request.querystring


【解决方案1】:

实际上,您应该使用 HttpServerUtility.UrlEncode 方法对 URL 的值进行编码:

example.aspx?name=<%=Server.UrlEncode(name)%>&sku=<%=Server.UrlEncode(sku)%>

URL 编码确保所有浏览器 将正确传输 URL 中的文本 字符串。问题等字符 标记 (?)、和号 (&)、斜线标记 (/),并且空格可能会被截断或 被某些浏览器损坏。作为一个 结果,这些字符必须是 在标签或查询中编码 字符串可以是字符串 由浏览器在请求中重新发送 字符串。

编辑:

让我们用您提供的值来检查一下: name = Bellagio™ 16 1/2" High Downbridge Outdoor Wall Light, sku = 46910:首先我创建了一个包含 2 个属性的页面:

public string Name
{
    get
    {
        return "Bellagio™ 16 1/2\" High Downbridge Outdoor Wall Light";
    }
}

public string Sku
{
    get
    {
        return "46910";
    }
}

然后在页面中添加链接定义:

<a href='1.aspx?name=<%=Server.UrlEncode(Name)%>&sku=<%=Server.UrlEncode(Sku)%>'>
    this is a link
</a>

然后获取这些值(先点击链接):

protected void Page_Load(object sender, EventArgs e)
{
    var name = Request.QueryString["name"];
    var sku = Request.QueryString["sku"];
}

这些值与您提供的完全相同:Bellagio™ 16 1/2\" High Downbridge Outdoor Wall Light46910

很遗憾,我无法重现您在第一条评论中发布的错误 URL:LifeSizePDF.aspx?productname=Bellagio&amp;amp;%238482%3b+16+1%2f2&amp;amp;quot%3­b+High+Downbridge+Outdoor+Wall+Light&amp;amp;shortsku=46910%2f

【讨论】:

  • +1 用于链接和内联编码,以获得良好的复制和粘贴解决方案。 :)
  • 我试过了,结果是这样的(sku 里面还有 /): action="LifeSizePDF.aspx?productname=Bellagio&%238482%3b+16+1%2f2&quot%3b +High+Downbridge+Outdoor+Wall+Light&shortsku=46910%2f"
  • @Zach:您能否提供您对skuproductname 的原始值?似乎值出现了乱码。
  • name = Bellagio™ 16 1/2" High Downbridge Outdoor Wall Light sku = 46910
  • 谢谢亚历克斯,我将不得不继续使用代码来查看发生了什么。如果以后有什么想法,请告诉我。
【解决方案2】:

使用 URL 编码来适当地格式化值,假设名称中的正斜杠是故意的并且希望与最终结果一起提取。

请注意,至少有两种方法可以轻松解决此问题,例如使用静态类HttpUtility,或者在Page 的上下文中使用Server 属性:

var encodedValue = HttpUtility.UrlEncode(rawValue);

var encodedValue = Server.UrlEncode(rawValue);

【讨论】:

    【解决方案3】:

    您可以只修剪 sku 请求的最终值:

    Request.QueryString["sku"].TrimEnd( '/' );
    

    【讨论】:

    • 他说要“修剪”结尾(尾随)斜线,而不是添加另一个。
    • @Harsh,我不确定你的意思。你能扩大一点吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-21
    • 2015-07-29
    • 1970-01-01
    • 2014-12-03
    • 2017-05-22
    • 2015-01-03
    • 2013-02-11
    相关资源
    最近更新 更多