2011-03-03 40 views
3

这是我在stackoverlow的第一篇文章,我找不到任何其他职位解决这个存在了,所以在这里云:使用的Request.QueryString,斜杠(/)添加到最后的查询字符串时,在第一查询字符串

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

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

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

收集值当我查看源的URL该页面发送查询字符串everyt兴看起来不错,但如果“名”包含正斜杠(/),它会以某种方式获得上涨了为“SKU”结束时,我检索查询字符串的值。我试图替换%2F的/,但不起作用。如果“名”的查询字符串没有斜杠一切看起来是正确的。

任何想法?

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

+0

@Zack - 与Server.UrlEncode固定查询字符串作为其他人所说的应该使用。但是,别的东西是错误的。问题的根源在于如果'name'值有一个正斜杠(/),那么斜杠将被添加到'sku'值。你需要看看你是如何设置'name'和'sku'查询字符串参数来看看为什么斜杠被添加到'sku'。 – 2011-03-03 20:03:23

回答

4

其实,你的应该HttpServerUtility.UrlEncode方法编码您的值的网址:

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"; 
    } 
} 

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

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

+0

+ 1为链接和内联编码一个不错的复制和粘贴解决方案。 :) – 2011-03-03 19:32:12

+0

我试过了,这是结果(sku仍然有/): action =“LifeSizePDF.aspx?productname = Bellagio &%238482%3b + 16 + 1%2f2 &”%3b + High + Downbridge +户外+墙+灯& shortsku = 46910%2f“ – Zach 2011-03-03 19:42:36

+0

@Zach:你能提供你的原始值'sku'和'productname'吗?看来价值观变得乱七八糟。 – Alex 2011-03-03 20:06:29

0

你可以只修剪SKU请求的终值:

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

这不会作为添加/将意味着目录... – 2011-03-03 19:30:20

+0

他说“修剪”结束(尾)斜线,而不是添加另一个。 – jonezy 2011-03-03 19:50:58

+0

@哈尔,我不确定你的意思。你能扩展一下吗? – 2011-03-03 19:57:20

2

使用URL编码,以适当的值设置格式,假设该名斜杠是故意的,并想与最终提取结果。

注意,至少有两种方式去了解这一点很容易,例如使用静态类HttpUtility,或在Page的情况下时,使用Server属性:

var encodedValue = HttpUtility.UrlEncode(rawValue); 

var encodedValue = Server.UrlEncode(rawValue); 
+0

+1,因为你击败了我一分钟;) – Alex 2011-03-03 19:36:40