使用Request.QueryString,当第一个查询字符串中存在斜杠(/)时,它会被添加到最后一个查询字符串中

时间:2011-03-03 19:21:00

标签: c# request.querystring

这是我在stackoverlow上的第一篇文章,我在其他帖子中找不到解决方案,所以在这里:

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

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

然后,我使用Request.QueryString["name"];Request.QueryString["sku"];

收集值

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

任何想法?

编辑:我最终不得不进行双重编码(server.urlencode)并进行双重解码,以使其正常工作。谢谢你的帮助!

3 个答案:

答案 0 :(得分:4)

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

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

URL编码可确保所有浏览器   将正确传输URL中的文本   字符串。诸如问题之类的人物   标记(?),&符号(&amp;),斜线标记   (/),空格可能被截断或   被一些浏览器破坏了。作为一个   结果,这些字符必须是   以标签或查询编码   字符串可以是的字符串   由浏览器在请求中重新发送   字符串。

修改

让我们用你提供的值来检查: name = Bellagio™ 16 1/2" High Downbridge Outdoor Wall Lightsku = 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

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

答案 1 :(得分:2)

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

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

var encodedValue = HttpUtility.UrlEncode(rawValue);

var encodedValue = Server.UrlEncode(rawValue);

答案 2 :(得分:0)

您可以修剪sku请求的结束值:

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