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

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

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

example.aspx?name=&sku= 

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

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

有任何想法吗?

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

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

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

URL编码可确保所有浏览器都能正确传输URL字符串中的文本。 某些浏览器可能会截断或损坏诸如问号(?),&符号,斜杠标记(/)和空格等字符。 因此,这些字符必须在标记或查询字符串中进行编码,其中字符串可以由浏览器在请求字符串中重新发送。

编辑:

让我们用您提供的值来检查: 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"; } } 

然后将链接定义添加到页面:

  this is a link  

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

 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&%238482%3b+16+1%2f2&quot%3b+High+Downbridge+Outdoor+Wall+Light&shortsku=46910%2f

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

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

 var encodedValue = HttpUtility.UrlEncode(rawValue); var encodedValue = Server.UrlEncode(rawValue); 

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

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