8

在 Page1.aspx 中,我有

byte[] byt = System.Text.Encoding.UTF8.GetBytes(TextBox1.Text);
Response.Redirect("Page2.aspx?BytArray=" + byt,false);

TextBox1 的值为“mnop”。

现在在 Page2.aspx 我有下面的代码

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {           
        var byteArray = System.Text.Encoding.UTF8.GetBytes(Request.QueryString["BytArray"]);

        var x1 = System.Convert.ToBase64String(byteArray, 0, byteArray.Length);

        var x2 = Encoding.UTF8.GetString(byteArray);
    }
}
  • x1输出为U3lzdGVtLkJ5dGVbXQ==

  • x2输出是System.Byte[]

但是如何让“mnop”回来?我错过了什么?

甚至C#:如何安全地将字节数组转换为字符串并返回?给出的答案是U3lzdGVtLkJ5dGVbXQ==

谢谢。

4

3 回答 3

10

您不能将原始字节作为查询字符串发送。改用Base64编码:

byte[] byt = System.Text.Encoding.UTF8.GetBytes(TextBox1.Text);
string encoded = HttpUtility.UrlEncode(Convert.ToBase64String(byt));
Response.Redirect("Page2.aspx?BytArray=" + encoded, false);

然后将其取回:

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {           
        byte[] byteArray = Convert.FromBase64String(Request.QueryString["BytArray"]);
        string value = System.Text.Encoding.UTF8.GetString(byteArray);
    }
}

但是当您可以直接发送文本框的字符串值(当然是在 url 编码之后)时,我真的看不出转换为字节数组的整个练习的意义。如果这是对用户隐藏真实价值的某种形式,我希望您清楚 Base64 不是加密,而是编码。

于 2012-05-21T06:58:51.927 回答
1

原始请求没有将其转换byt为字符串 - 它只是将其用作字节。所以这一行:

Response.Redirect("Page2.aspx?BytArray=" + byt,false);

实际上是去这个网址:

Page2.aspx?BytArray=System.Byte[]

您需要将该行更改为:

Response.Redirect("Page2.aspx?BytArray=" + HttpUtility.UrlEncode(System.Convert.ToBase64String(byt)), false);

然后在回来的路上替换所有这些:

var byteArray = System.Text.Encoding.UTF8.GetBytes(Request.QueryString["BytArray"]);

var x1 = System.Convert.ToBase64String(byteArray, 0, byteArray.Length);

var x2 = Encoding.UTF8.GetString(byteArray);

就这样:

var byteArray = Convert.FromBase64String(Request.QueryString["BytArray"]);

var x2 = Encoding.UTF8.GetString(byteArray);
于 2012-05-21T07:00:27.823 回答
0

你不能。第一页的代码发送的不是字节数组的值,而是数据类型。Request.QueryString["BytArray"]return System.Byte[],因此无法取回原始字节数组的内容。

如果不对它们进行进一步编码,就不能在 URL 中将字节作为数据发送。例如,您可以使用 base64:

byte[] byt = System.Text.Encoding.UTF8.GetBytes(TextBox1.Text);
Response.Redirect("Page2.aspx?BytArray=" + Server.UrlEncode(Convert.ToBase64String(byt)), false);

现在 URL 包含实际字节,因此可以获取它们:

byte[] byteArray = Convert.FromBase64String(Request.QueryString["BytArray"]);
string x = System.Text.Encoding.UTF8.GetString(byteArray);
于 2012-05-21T07:02:36.060 回答