我不知道,如果我只是过于乐观,但有没有办法隐藏在URL中返回的查询字符串?ASP.NET:隐藏在查询字符串的URL
我在这个场景是在那里我有page1.aspx这个通过后重定向命令到外部服务器,并返回它page2.aspx。我遇到的唯一问题是返回的变量的查询字符串仍然保留在URL中。
我只是想隐藏从普通用户的丑串/信息。那么,有没有办法来编辑和重新加载,在页面加载方法还是我只需要保存一个中间人页面上的变量,然后打2
我不知道,如果我只是过于乐观,但有没有办法隐藏在URL中返回的查询字符串?ASP.NET:隐藏在查询字符串的URL
我在这个场景是在那里我有page1.aspx这个通过后重定向命令到外部服务器,并返回它page2.aspx。我遇到的唯一问题是返回的变量的查询字符串仍然保留在URL中。
我只是想隐藏从普通用户的丑串/信息。那么,有没有办法来编辑和重新加载,在页面加载方法还是我只需要保存一个中间人页面上的变量,然后打2
页,我不喜欢这种方法,但它会奏效。
一旦你知道你是你需要的地方,你可以Response.Redirect到同一页面,他们将会消失。
什么是这些查询字符串变量的由来?你不能提交所有的数据作为POST数据,所以没有查询字符串?
你可能也使用
Context.RewritePath("/foo.aspx")
这里有一个ScottGu博客文章URL重写的链接。
http://weblogs.asp.net/scottgu/archive/2007/02/26/tip-trick-url-rewriting-with-asp-net.aspx
一段时间回来我做了一些HTTP编码加密/解密用于此目的的方法。有时在asp.net中,您需要使用查询字符串,但您还需要最终用户不知道该值。我所做的是base 64编码,对值进行加密,根据我的私钥对值进行散列,然后用 - 将它们粘在一起。另一方面,我检查左侧散列以验证真实性,并解密右侧。一个非常好的问题是+(这是一个有效的base64字符串值)等于html编码中的空格,所以我在解密时考虑到这一点。
我用这是加密值添加到查询字符串,然后对其进行解密在另一侧
private const string KEY = "<random value goes here>";
public static string EncryptAndHash(this string value)
{
MACTripleDES des = new MACTripleDES();
MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
des.Key = md5.ComputeHash(Encoding.UTF8.GetBytes(KEY));
string encrypted = Convert.ToBase64String(des.ComputeHash(Encoding.UTF8.GetBytes(value))) + '-' + Convert.ToBase64String(Encoding.UTF8.GetBytes(value));
return HttpUtility.UrlEncode(encrypted);
}
/// <summary>
/// Returns null if string has been modified since encryption
/// </summary>
/// <param name="encoded"></param>
/// <returns></returns>
public static string DecryptWithHash(this string encoded)
{
MACTripleDES des = new MACTripleDES();
MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
des.Key = md5.ComputeHash(Encoding.UTF8.GetBytes(KEY));
string decoded = HttpUtility.UrlDecode(encoded);
// in the act of url encoding and decoding, plus (valid base64 value) gets replaced with space (invalid base64 value). this reverses that.
decoded = decoded.Replace(" ", "+");
string value = Encoding.UTF8.GetString(Convert.FromBase64String(decoded.Split('-')[1]));
string savedHash = Encoding.UTF8.GetString(Convert.FromBase64String(decoded.Split('-')[0]));
string calculatedHash = Encoding.UTF8.GetString(des.ComputeHash(Encoding.UTF8.GetBytes(value)));
if (savedHash != calculatedHash) return null;
return value;
}
谢谢马特布里格斯resoultion ..我一直在寻找这个解决方案相当一段时间,并在这里找到它。奇迹般有效 。非常感谢 :) – 2010-02-23 17:26:58
的方式它保留查询字符串和表单变量(任选地)。它不显示在用户Web浏览器中重定向请求的真实URL。 Server.Transfer
在浏览器不知道任何事情的情况下发生。浏览器请求页面,但服务器返回另一页面的内容。
protected void btnServer_Click(object sender, EventArgs e)
{
Server.Transfer("~/About.aspx?UserId=2");
}
它从外部服务器返回,它遇到了我的page2.aspx,URL是localhost/page2.aspx?results = data。所以我没有控制它是如何击中第2页的,我只是想将地址栏中的信息隐藏起来 – Jared 2009-09-29 17:16:43
然后我同意瑞克的说法,重定向就是要走到这里的路。 – RedFilter 2009-09-29 17:41:03