如何读取这样的QueryString值?200分求教!

Miracle 2005-05-26 08:55:01
有这样的一个Url:
http://localhost/WebApplication1/a.aspx?sUrl=http://www.aaa.com/(ombdtt55ejgrbwnzrfbzcu45)/download/index.aspx

注意后面的sUrl部分,包含一个url munging的部分(ombdtt55ejgrbwnzrfbzcu45)/
如果在a.aspx中直接读取Request.QueryString["sUrl"],你会发现返回结果变成了
http://www.aaa.com/download/index.aspx,
"(ombdtt55ejgrbwnzrfbzcu45)/"消失了!

现在问题就是,如何保持sUrl原来的值不变把它给取出来了呢?如果能解决,除了现在的200分,另送200分!
...全文
563 53 打赏 收藏 转发到动态 举报
写回复
用AI写文章
53 条回复
切换为时间正序
请发表友善的回复…
发表回复
wlzbaby 2005-05-27
  • 打赏
  • 举报
回复
我的方法不行?
mathsword 2005-05-26
  • 打赏
  • 举报
回复
总结一下,目前两种解决方式,1,js,2就是楼上的通过方法取,再拼回去
wlzbaby 2005-05-26
  • 打赏
  • 举报
回复
思路不复杂

就是把那字符串取出来然后手动加回去
wlzbaby 2005-05-26
  • 打赏
  • 举报
回复
string s1 = Request.QueryString["sUrl"].ToString();

string s2 = Request.Params["HTTP_ASPFILTERSESSIONID"].ToString();

s2 = "("+ s2 +")/";

s1 = s1.Insert(s1.IndexOf("/", 7) + 1, s2);

Response.Redirect(s1);

不知道符不符合楼主要求
dcren118 2005-05-26
  • 打赏
  • 举报
回复
对 把sUrl=http://www.aaa.com/(ombdtt55ejgrbwnzrfbzcu45)/download/index.aspx
先加密传过来 然后在解密 试试!
renyu732 2005-05-26
  • 打赏
  • 举报
回复
坐下来学习学习...
Seeko0 2005-05-26
  • 打赏
  • 举报
回复
这个是原因.net在cookieless=true的时候会把客户的SessionID附加到地址中传上来
解决方法:
1、在传地址的时候对(|)符号进行替换处理,获取URL后再恢复
2、获取URL进行分析,然后在URL上增加一个(SessionID);
liuqinglq 2005-05-26
  • 打赏
  • 举报
回复
晕,发现 huigll() 写在我前面了...-_-

他给出了代码,我给的是思想^_^
liuqinglq 2005-05-26
  • 打赏
  • 举报
回复
楼主的目的是要取得这个

http://www.aaa.com/(ombdtt55ejgrbwnzrfbzcu45)/download/index.aspx

首先,对方可以不可以把这样的字符串编码或者用某个函数进行字符替换。如果可以,那么就好办。你这边只要解码,或者用相应函数把字符替换回来。

其次,假设首先的条件无论如何不能成立,也就是说,对方只能传给你这种原始值。那也有办法,我们自己进行转换。考虑到用JS是能取得全部地址的,也就是window.location;但是,JS是客户端的,楼主是要服务器端取得该值,于是,我们只要在客户端用JS对这个地址进行编码,然后用自动转向,再次发出页面申请,把编码后的地址传给相应的处理页面。这样,应该就OK了。

关于window.location是不是真的能取全整个URL,我现在没有空测试,一会测试一下^_^
TjBoy_squall 2005-05-26
  • 打赏
  • 举报
回复
使用 Cookieless 会话的缺点是,如果调用绝对 URL,将丢失会话状态。使用 Cookie 时,您可以清除地址栏,转至其他应用程序,然后返回上一个应用程序并检索相同的会话值。如果在禁用会话 Cookie 时执行此操作,将丢失会话数据。例如,以下代码将打断该会话:

<a runat="server" href="/code/page.aspx">Click</a>

如果需要使用绝对 URL,请通过一些小技巧手动将会话 ID 添加到 URL 中。您可以对 HttpResponse 类调用 ApplyAppPathModifier 方法。

<a runat="server"
href=<% =Response.ApplyAppPathModifier("/code/page.aspx")%> >Click</a>

ApplyAppPathModifier 方法将使用表示 URL 的字符串,并返回嵌入会话信息的绝对 URL。例如,需要从 HTTP 页面重定向到 HTTPS 页面时,此技巧特别有用。



仔细看看人家写的!!

已经很清楚了!!

huigll 2005-05-26
  • 打赏
  • 举报
回复
//用script取window.location.href是什么都没有掉的。
//所以可以这么绕过去:
//分析此url,
//把要传的参数值用encodeURIComponent编码, 再跳转到某页,就可以QueryString了。

//a.aspx只留script
<script language=javascript>
var strurl = window.location.href;
var tmpi = strurl.indexOf("?");
var strHead = "TestUrl.aspx";//要处理的页
var rtnValue="?";

if (tmpi!=-1)
{
var strpara = strurl.substr(tmpi+1);
var valuearray = strpara.split("&");
for (var i=0;i<valuearray.length;i++)
{
var tmpa = valuearray[i].split("=");
//alert(tmpa[0]);//参数
//alert(tmpa[1]);//值
//alert(decodeURIComponent(tmpa[1]));
if (decodeURIComponent(tmpa[1]) == tmpa[1])//没有编码
rtnValue +=tmpa[0] + "=" + encodeURIComponent(tmpa[1]);
else
rtnValue +=tmpa[0] + "=" + tmpa[1];//编过码,不处理

}
}
if (rtnValue.length>1)
strHead += rtnValue
window.navigate(strHead);
</script>

//=============================================================================
//TestUrl.aspx
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
this.Response.Write (this.Request.QueryString["sUrl"]);
}
//如果传参数的时候就加成unicode就没有这么麻烦了。
shan1119 2005-05-26
  • 打赏
  • 举报
回复
If IsPostBack Then
Response.Write(Request.UrlReferrer.AbsoluteUri)
End If
第一次进页面没有值,第二次就有了,很奇怪,不懂啊
du9232 2005-05-26
  • 打赏
  • 举报
回复
欧是用session传的,没问题
zldcolin 2005-05-26
  • 打赏
  • 举报
回复
try to construct like this

http://localhost/samplecookieless/(lvymatawljpjtl55d4awjg55)/login.aspx
As you can see, on each request, the session ID is passed as a directory. Very smart solution from MS! When you want to create a link with get parameters to another page, you have to pay attention to it, since calling an aspx without the session ID in the address will create a new session. So, to create a link, that has GET parameters, do this:

string url =
string.Format(
// we build the whole link. Firstly, we get our host name
"http://" + Request.Headers["Host"] + "/" +
// then the path of the request, and append the session ID, as shown above
Request.ApplicationPath +
"/(" + Session.SessionID +
// simply add the target page with the HTTP-GET parameters.
")/Main.aspx?{0}={1}&{2}={3}",
"State", state.ToString(),
"Lang", langID.ToString()
);
David_du 2005-05-26
  • 打赏
  • 举报
回复
晕呀,支持 teapot(茶壶) !
zhouweiwansui 2005-05-26
  • 打赏
  • 举报
回复
那个是cookie啊,读出来有用么?
iis会自动给你加上的
teapot 2005-05-26
  • 打赏
  • 举报
回复
老M,很有意思的是,在我的机器上,把()中的最后一个改成大于5的数字,比如将45改为46,47,48就正常了。如果,在你的机器上也是这样,那么,应该如何解释呢?所谓24个字符规则云云,似乎也符合。规则相同,但数据只是小小的不同(位数没变,类型也没有变),就产生不同的结果,是bug吗?我不知道。但我试了试,似乎/(不碰到一起就没有问题。你可以试试将所以/进行编码转换。
Miracle 2005-05-26
  • 打赏
  • 举报
回复
ok,感谢大家的帮助,目前为止,我发现让对方把sUrl编码成

http%3A%2F%2Fwww.aaa.com%2F%28ombdtt55ejgrbwnzrfbzcu45%29%2Fdownload%2Findex.aspx

这样的形式,就没有问题了。

如果对方不合作,不肯进行预处理,那我想的办法跟茶壶兄差不多,用一个非asp.net的前导页面,通过服务器端的asp脚本,或者客户端的js,进行预处理,然后把编码过后的结果传递给a.aspx。
masterlijianfei 2005-05-26
  • 打赏
  • 举报
回复
urlEncode
urlDecode
David_du 2005-05-26
  • 打赏
  • 举报
回复
第二个方法漏了一个括号,也就是任意在前面加一个字符!
加载更多回复(33)

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

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