Примерно в сентябре прошлого года я работал над функцией генерации изображений. Конечно, существует множество методов. Сгенерированные изображения помещались в определенный каталог на сервере и через некоторое время удалялись, и мне приходилось рисовать их самостоятельно. , что было слишком хлопотно, но я нашел этот параграф кода, сегодня я увидел, как использовать файл .ashx для обработки IHttpHandler для реализации отправки текстовых и двоичных данных. Внезапно я обнаружил, что это использование хорошо обсуждалось. Возможно, официальный китайский документ не представил его подробно, а вместо этого рекомендовал другой метод.
//----------------------------------------
//Выберите любимый формат изображения
//--------------------------------
byte[] byteArr = (byte[]) oChartSpace.GetPicture ("png", 500, 500);
//----------------------------------------
// Сохраняем изображение диаграммы в сеансе, чтобы его позже мог использовать HttpHandler
//------------------------------------------
HttpContext ctx = HttpContext.Current;
строкаcharID = Guid.NewGuid().ToString();
ctx.Session [chartID] = byteArr;
imgHondaLineup.ImageUrl = string.Concat ("chart.ashx?",chartID)
Вchart.ashx есть следующее предложение
<% @ WebHandler Language="C#" class="AspNetResources.Owc.ChartHandler" codebehind="chart. ashx .cs" %>
Фактически, вы также можете использовать это вместо
добавления<httpHandlers>
в <system.web> в web.config
<add verb="*" path="*.ashx" type="AspNetResources.Owc, ChartHandler " validate="false" /> /*ChartHandler — это ассемблерный код, созданный после компиляции ashx.cs*/
<!--Поскольку после этого мы захватываем все запросы, убедитесь, что Error.aspx не полагается на .Text -->
<add verb="*" path="Error.aspx" type="System.Web.UI.PageHandlerFactory" />
</httpHandlers>
Неважно, какой из них вы используете. Последний более удобен после настройки, независимо от пути. На самом деле применение этой идеи в .text хорошо известно, но направление применения другое. .
Код файла ashx.cs
с использованием System;
использование System.Web.SessionState;
использование System.IO;
пространства имен
System.Web
AspNetResources.Owc;
{
открытый класс ChartHandler: IHttpHandler, IReadOnlySessionState
{
public bool IsReusable
{
получить {вернуть истину}
}
общественный недействительный ProcessRequest (HttpContext ctx)
{
строкаcharID = ctx.Request.QueryString[0];
Массив arr = (Массив) ctx.Session [chartID]
ctx.ClearError ();
ctx.Response.Expires = 0;
ctx.Response.Buffer = правда;
ctx.Response.Clear ();
MemoryStream memStream = новый MemoryStream ((byte[])arr);
memStream.WriteTo (ctx.Response.OutputStream);
memStream.Close ();
ctx.Response.ContentType = "изображение/png";
ctx.Response.StatusCode = 200;
ctx.Ответ.Конец ()
;
}
}