Alrededor de septiembre del año pasado, estaba trabajando en una función para generar imágenes. Por supuesto, hay muchos métodos. Las imágenes generadas se colocaron en un directorio determinado en el servidor y luego de un tiempo tuve que dibujarlas yo mismo. , lo cual fue demasiado problemático, pero encontré este párrafo Código. Hoy vi cómo usar el archivo .ashx para procesar IHttpHandler para implementar el envío de texto y datos binarios. De repente descubrí que este uso estaba bien discutido. Quizás el documento oficial chino no lo presentó en detalle y recomendó otro método.
//----------------------------------------
//Elige tu formato de imagen favorito
//--------------------------------
byte[] byteArr = (byte[]) oChartSpace.GetPicture ("png", 500, 500);
//----------------------------------------
// Almacena la imagen del gráfico en la sesión para que un HttpHandler la recoja más tarde
//------------------------------------------
HttpContext ctx = HttpContext.Current;
cadena chartID = Guid.NewGuid ().ToString ();
ctx.Session [chartID] = byteArr;
imgHondaLineup.ImageUrl = string.Concat ("chart.ashx?", chartID);
existe la siguiente oración en chart.ashx
<% @ WebHandler language="C#" class="AspNetResources.Owc.ChartHandler" codebehind="chart. ashx .cs" %>
De hecho, también puedes usar esto en lugar de
agregar<httpHandlers>
a <system.web> en web.config
<add verb="*" path="*.ashx" type="AspNetResources.Owc, ChartHandler " validar="false" /> /*ChartHandler es el código ensamblado generado después de compilar ashx.cs*/
<!--Dado que estamos capturando todas las solicitudes posteriores a esto, asegúrese de que Error.aspx no dependa de .Text -->
<añadir verb="*" ruta="Error.aspx" tipo="System.Web.UI.PageHandlerFactory" />
</httpHandlers>
No importa cuál uses. Este último es más conveniente una vez configurado, sin importar la ruta. De hecho, la aplicación de esta idea es bien conocida en .text, pero la dirección de la aplicación es diferente. .
El código del archivo ashx.cs
usando System;
usando System.Web.SessionState;
usando System.IO;
utilizando System.Web
espacio de nombres AspNetResources.Owc;
{
clase pública ChartHandler: IHttpHandler, IReadOnlySessionState
{
bool público es reutilizable
{
obtener {regresar verdadero}
}
Solicitud de proceso pública vacía (HttpContext ctx)
{
cadena chartID = ctx.Request.QueryString[0];
Array arr = (Matriz) ctx.Session [chartID];
ctx.ClearError ();
ctx.Response.Expires = 0;
ctx.Response.Buffer = verdadero;
ctx.Response.Clear ();
MemoryStream memStream = nuevo MemoryStream ((byte[])arr);
memStream.WriteTo (ctx.Response.OutputStream);
memStream.Close ();
ctx.Response.ContentType = "imagen/png";
ctx.Response.StatusCode = 200;
ctx.Respuesta.End ()
;
}
}