Как работает метод binarywrite()?

#c# #asp.net #http #generic-handler

#c# #asp.net #http #универсальный обработчик

Вопрос:

У меня есть следующие строки кода из файла .ashx.

  public void ProcessRequest (HttpContext context)
  {
    string hstr = @"Data Source=SUMAN-PCSQLEXPRESS;Initial Catalog=school;Integrated  Security=True";
    SqlConnection con = new SqlConnection(hstr);
    string ms = context.Request.QueryString["id_image"].ToString();
    con.Open();
    SqlCommand cmd = new SqlCommand("select img from class where classid="   ms, con);
    SqlDataReader dr = cmd.ExecuteReader();
    dr.Read();
    context.Response.BinaryWrite((Byte[])dr[0]);
    context.Response.End();
}
  

После некоторого изучения я обнаружил это

«Метод BinaryWrite отправляет определенные данные в текущий HTTP-вывод без каких-либо преобразований символов».

Что это значит? Как он отправляет данные на вывод http? Где вывод HTTP?

Комментарии:

1.Что это значит, что он говорит. Как он отправляет данные на http-вывод, OutputStream.Write где находится HTTP-вывод HttpResponse.OutputStream

2. у меня нет OutputStream. Напишите в любом месте моего кода. итак, как работает этот Binarywrite. Куда он отправляет данные?

3. Если бы это было OutputStream.Write в вашем коде, вы бы не вызывали BinaryWrite

4. итак, что делает BinaryWrite? какова его цель?

Ответ №1:

В данном случае context.Response это поток, представляющий данные, которые отправляются клиенту (скорее всего, веб-браузеру), который выдает http-запрос. Context.Response предоставляется вам автоматически «движком» ASP за кулисами. Все, что вы запишете в этот поток, в конечном итоге будет отправлено в браузер.

Универсальный http-обработчик автоматически предоставляет вам экземпляр HttpContext с именем Context . HttpContext содержит два свойства, называемые Request и Response, которые позволяют вам получить доступ к запросу, который обслуживает ваш универсальный обработчик, и соответствующему ответу. Обработчик должен выполнить любую обработку, которая ему необходима, и отправить результат, записав свой ответ в поток ответов.

Комментарии:

1. Хорошо, это полезно. ИТАК, BinaryWrite отправляет данные в браузер? Можете ли вы предоставить мне ссылку для подробного изучения, потому что я, похоже, не нахожу подходящей.

2. Что ж, в данном конкретном случае BinaryWrite отправляет данные в браузер, но BinaryWrite на самом деле является прокси-методом, который принадлежит универсальному Stream классу, которым Response управляет экземпляр для вас. Потоки на самом деле могут указывать на что угодно: файл на жестком диске, блок памяти, другой компьютер в сети или даже другой поток. Представьте потоки, подобные садовым шлангам. Вода (данные) поступает в один конец и выходит где-то в другом месте. В случае Context.Response движка ASP настройте все так, чтобы Response поток мог отправлять данные любому http-клиенту, отправившему первоначальный запрос.

3. Эта статья в MSDN должна дать вам лучшее представление о том, как работают потоки в целом. msdn.microsoft.com/en-us/library /… . Необработанные потоки на самом деле не обеспечивают хорошего прямого доступа для записи данных, поэтому обычно используется некоторая форма writer объекта, который может датировать данные в любой имеющейся у вас форме и преобразовывать их в соответствии с потребностями потока. В этом случае создается StreamWriter , который подключается к потоку, подключенному к браузеру. HttpResponse. BinaryWrite принимает массив байтов, отправляет его в средство записи потока, которое помещает эти байты в HttpStream.

4. Мне все еще не ясно. Вы сказали, что BinaryWrite() отправляет данные в браузер. Но откуда получены эти данные и как эти данные используются браузером?

5. Браузер может делать все, что захочет, с данными, которые вы ему отправляете, обычно они используются для отображения веб-страницы. В этом случае отправляемые вами данные представляют собой необработанную html-разметку для отображения страницы. Совсем недавно ajax позволил существующим страницам запрашивать данные напрямую. В случае ajax данные могут быть использованы практически для чего угодно. Все определяется тем, что JavaScript, отправивший запрос, хочет с ним сделать.