Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ASP.NET:在URL中隐藏查询字符串_Asp.net_Post_Url Rewriting - Fatal编程技术网

ASP.NET:在URL中隐藏查询字符串

ASP.NET:在URL中隐藏查询字符串,asp.net,post,url-rewriting,Asp.net,Post,Url Rewriting,我不知道我是否过于乐观,但有没有办法隐藏URL中返回的查询字符串 我所处的场景是page1.aspx通过post将命令重定向到外部服务器,并将其返回到page2.aspx。我唯一的问题是,返回变量的查询字符串仍然保留在URL中 我只想对普通用户隐藏难看的字符串/信息。那么有没有一种方法可以在pageload方法中编辑和重新加载,或者我只需将变量保存在中间人页面上,然后点击第2页。我不喜欢这种方法,但它会起作用 一旦你知道你在哪里,你就可以响应。重定向到同一个页面,它们就会消失。这些查询字符串变量

我不知道我是否过于乐观,但有没有办法隐藏URL中返回的查询字符串

我所处的场景是page1.aspx通过post将命令重定向到外部服务器,并将其返回到page2.aspx。我唯一的问题是,返回变量的查询字符串仍然保留在URL中


我只想对普通用户隐藏难看的字符串/信息。那么有没有一种方法可以在pageload方法中编辑和重新加载,或者我只需将变量保存在中间人页面上,然后点击第2页。

我不喜欢这种方法,但它会起作用


一旦你知道你在哪里,你就可以响应。重定向到同一个页面,它们就会消失。

这些查询字符串变量的来源是什么?您不能将所有数据作为POST数据提交,这样就没有查询字符串了吗?

您也可以使用

Context.RewritePath("/foo.aspx")
这里有一个链接到ScottGu关于URL重写的博客文章


不久前,我为此制作了一些http编码加密/解密方法。有时在asp.net中,您需要使用查询字符串,但也需要最终用户不知道该值。我所做的是base64编码,加密值,基于我的私钥对值进行散列,然后用-将它们粘在一起。另一方面,我检查左侧哈希以验证真实性,并解密右侧哈希。一个很好的解释是+(一个有效的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;
    }
private const string KEY=”“;
公共静态字符串EncryptAndHash(此字符串值)
{
MACTripleDES=新的MACTripleDES();
MD5CryptoServiceProvider md5=新的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));
返回HttpUtility.UrlEncode(加密);
}
/// 
///如果自加密后字符串已被修改,则返回null
/// 
/// 
/// 
公共静态字符串DecryptWithHash(此字符串已编码)
{
MACTripleDES=新的MACTripleDES();
MD5CryptoServiceProvider md5=新的MD5CryptoServiceProvider();
des.Key=md5.ComputeHash(Encoding.UTF8.GetBytes(Key));
字符串解码=HttpUtility.UrlDecode(编码);
//在url编码和解码过程中,加号(有效的base64值)被替换为空格(无效的base64值)。这与此相反。
已解码=已解码。替换(“,“+”);
字符串值=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)返回null;
返回值;
}

它保留查询字符串和表单变量(可选)。它不会显示在用户web浏览器中重定向请求的真实URL<代码>服务器。传输在浏览器一无所知的情况下进行。浏览器请求一个页面,但服务器返回另一个页面的内容

protected void btnServer_Click(object sender, EventArgs e)
{
    Server.Transfer("~/About.aspx?UserId=2");
}

它从外部服务器返回,点击我的page2.aspx,URL为localhost/page2.aspx?results=data。所以我无法控制它是如何进入第二页的,我只想把信息隐藏在地址中。barThen我同意rick的观点,重定向是到这里的方法。谢谢Matt Briggs提供的资源。。我一直在寻找这个解决方案相当长的一段时间,并发现它在这里。工作起来很有魅力。非常感谢:)