我不知道我是否只是过于充满希望,但有没有办法隐藏URL中返回的查询字符串?
我所处的场景是我将page1.aspx通过帖子将命令重定向到外部服务器,并将其返回到page2.aspx。我遇到的唯一问题是返回的变量的查询字符串仍留在URL中。
我只想隐藏普通用户的丑陋字符串/信息。那么有没有办法在pageload方法中编辑和重新加载它,或者我只需要将变量保存在中间人页面上然后点击第2页。
答案 0 :(得分:4)
这些查询字符串变量的来源是什么?你能否不能将所有数据作为POST数据提交,以便没有查询字符串?
答案 1 :(得分:3)
您也可以使用
Context.RewritePath("/foo.aspx")
这是一篇关于URL重写的ScottGu博客文章的链接。
http://weblogs.asp.net/scottgu/archive/2007/02/26/tip-trick-url-rewriting-with-asp-net.aspx
答案 2 :(得分:2)
前来我为此目的制作了一些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;
}
答案 3 :(得分:1)
我不喜欢这种方法,但它会起作用。
一旦您知道自己所在的位置,就可以 Response.Redirect 到同一页面,它们就会消失。
答案 4 :(得分:0)
它保留了Query String和Form Variables(可选)。它不会显示在用户Web浏览器中重定向请求的真实URL。 Server.Transfer
在浏览器不知情的情况下发生。浏览器请求页面,但服务器返回另一个页面的内容。
protected void btnServer_Click(object sender, EventArgs e)
{
Server.Transfer("~/About.aspx?UserId=2");
}