2012-05-21 3 views
4

В Page1.aspx, у меня естьПреобразовать массив байтов в строку в Asp.net

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 []

Но как вернуть «мноп»? Что мне не хватает?

Даже C#: How can I safely convert a byte array into a string and back? дал ответ, как U3lzdGVtLkJ5dGVbXQ ==

Спасибо.

ответ

6

Вы не можете отправлять необработанные байты в качестве строки запроса. Попробуйте 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 не шифрует, это кодирование.

1

Исходный запрос не преобразовывал byt в строку - он просто использовал его как байты. Так эта линия:

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

был на самом деле происходит в этом URL:

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); 
0

Вы не можете. Код на первой странице не отправляет значение байтового массива, а тип данных. Request.QueryString["BytArray"] возвращает 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); 
Смежные вопросы