url 编码 转码的问题

永动bug制造机 2018-06-24 10:11:55
在标签跳转的时候 需要传一个url url有两个参数如下

string backurl = HttpUtility.UrlEncode("on=2&bocode=" + mainEntity.Get("roomcode", ""));


<span class="gofull"><a href="/wxmembercenter/myinfopage?on=4&backurl=@backurl" class="min-btn">完善个人信息</a> </span>


跳转到 myinfopage后接受backurl 然后通过js 跳回到 backurl

string backUrl =HttpUtility.UrlDecode(RequestHelper.GetQueryString("backurl", ""));


location.href ="@(backUrl)";


跳回backurl 为 “on=2&bocode=ad8ab36a-7012-4fa6-a432-987e43f6a070”
参数中的& 被转义为 & 导致无法获取参数
求问该怎么解决
...全文
474 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
永动bug制造机 2018-06-27
  • 打赏
  • 举报
回复
引用 10 楼 sp1234 的回复:
贴出你的直截了当的调试,不要用“如果对&转义后 decode........”这类带有含糊的干扰调试的词儿。

如果你的 backUrl 是你贴出的最终的值,你也用不着说“如果......”。如果说了“如果”就让人怀疑你口中说的跟实际代码执行的是脱离的、不真实的。程专业序员最起码的一个素质就是调试为准——真实地贴出调试结果——而不是靠仅仅动嘴。

意思是我不能把我的调试条件带出来 不能给除了你的其他人看看了 有趣
  • 打赏
  • 举报
回复
贴出你的直截了当的调试,不要用“如果对&转义后 decode........”这类带有含糊的干扰调试的词儿。

如果你的 backUrl 是你贴出的最终的值,你也用不着说“如果......”。如果说了“如果”就让人怀疑你口中说的跟实际代码执行的是脱离的、不真实的。程专业序员最起码的一个素质就是调试为准——真实地贴出调试结果——而不是靠仅仅动嘴。
  • 打赏
  • 举报
回复
明白你的意思了。

贴出你在
string backUrl =HttpUtility.UrlDecode(RequestHelper.GetQueryString("backurl", ""));
这里的调试结果。GetQueryString 方法得到的结果是什么?有 bug?
永动bug制造机 2018-06-24
  • 打赏
  • 举报
回复
完整的backurl如下

string backurl = "/wxhotel/orderpage?on=2&bocode=" + HttpUtility.UrlEncode(mainEntity.Get("roomcode", ""));
永动bug制造机 2018-06-24
  • 打赏
  • 举报
回复
引用 1 楼 sp1234 的回复:
string backurl = "on=2&bocode=" + HttpUtility.UrlEncode( mainEntity.Get("roomcode", ""));

这样bocode 会被认为传给第2个页面的参数 不是backurl的内容 我的bocode可能是动态的 大神有其他路子没
  • 打赏
  • 举报
回复
string backurl = "on=2&bocode=" + HttpUtility.UrlEncode( mainEntity.Get("roomcode", ""));
  • 打赏
  • 举报
回复
我是说,你要直接贴出
 string backUrl =HttpUtil.......
这里的调试结果。如果这个变量的值是真实的 url,那么就是你的页面渲染机制出了问题。如果这个值是错误的(包含 &),那么应该是之前的编码时就出了问题。从这里判断下一步该调试哪里。
xuzuning 2018-06-24
  • 打赏
  • 举报
回复
手工进行了编码,就必须手动进行解码
  • 打赏
  • 举报
回复
Request 接收参数乱码原理解析一:服务器端解码原理
Request.QueryString[key]、Request.Form[key]默认都会调用函数HttpUtility.UrlDecode(str, encoding),如果HTTP请求的数据只经过一次编码,无需再调用解码函数;
永动bug制造机 2018-06-24
  • 打赏
  • 举报
回复
引用 4 楼 sp1234 的回复:
明白你的意思了。

贴出你在
string backUrl =HttpUtility.UrlDecode(RequestHelper.GetQueryString("backurl", ""));
这里的调试结果。GetQueryString 方法得到的结果是什么?有 bug?

如果对&转义后 decode
/wxhotel/orderpage?on=2&bocode=ad8ab36a-7012-4fa6-a432-987e43f6a070 & 没有decode回来
永动bug制造机 2018-06-24
  • 打赏
  • 举报
回复
引用 4 楼 sp1234 的回复:
明白你的意思了。

贴出你在
string backUrl =HttpUtility.UrlDecode(RequestHelper.GetQueryString("backurl", ""));
这里的调试结果。GetQueryString 方法得到的结果是什么?有 bug?


http://localhost:49836/wxmembercenter/myinfopage?on=4&backurl=/wxhotel/orderpage?on=2&bocode=ad8ab36a-7012-4fa6-a432-987e43f6a070

请求第2个页面完整URL如上 backurl 应该是后面所有内容 如果不对&转义 得到的backurl=/wxhotel/orderpage?on=2
如果转义了 返回到第1个页面时候 & 也被转义了 获取不到 bocode的值

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧