Etwa im September letzten Jahres habe ich an einer Funktion zum Generieren von Bildern gearbeitet. Natürlich wurden die generierten Bilder in einem bestimmten Verzeichnis auf dem Server abgelegt und nach einiger Zeit musste ich die Bilder selbst löschen , was zu mühsam war, aber ich habe diesen Absatzcode gefunden. Heute habe ich gesehen, wie man mit der .ashx-Datei IHttpHandler verarbeitet, um das Senden von Text und Binärdaten zu implementieren. Plötzlich stellte ich fest, dass diese Verwendung gut diskutiert wurde. Vielleicht wurde sie im offiziellen chinesischen Dokument nicht im Detail vorgestellt und stattdessen eine andere Methode empfohlen.
//--------------------------
//Wählen Sie Ihr bevorzugtes Bildformat
//--------------------------------
byte[] byteArr = (byte[]) oChartSpace.GetPicture ("png", 500, 500);
//--------------------------
// Speichern Sie das Diagrammbild in Session, um es später von einem HttpHandler abzurufen
//--------------
HttpContext ctx = HttpContext.Current;
string chartID = Guid.NewGuid ().ToString ();
ctx.Session [chartID] = byteArr;
imgHondaLineup.ImageUrl = string.Concat ("chart.ashx?", chartID);
Es gibt den folgenden Satz in chart.ashx
<% @ WebHandler language="C#" class="AspNetResources.Owc.ChartHandler" codebehind="chart. ashx .cs" %>
Tatsächlich können Sie dies auch verwenden, anstatt
<httpHandlers>
zu <system.web> in web.config
hinzuzufügen
<add verb="*" path="*.ashx" type="AspNetResources.Owc, ChartHandler " validieren="false" /> /*ChartHandler ist die Code-Assembly, die nach der Kompilierung von ashx.cs generiert wird*/
<!--Da wir danach alle Anfragen erfassen, stellen Sie sicher, dass Error.aspx nicht auf .Text --> basiert
<add verb="*" path="Error.aspx" type="System.Web.UI.PageHandlerFactory" />
</httpHandlers>
Es spielt keine Rolle, welches Sie verwenden. Letzteres ist unabhängig vom Pfad praktischer. Tatsächlich ist die Anwendung dieser Idee in .text bekannt, aber die Anwendungsrichtung ist unterschiedlich .
Der Code der ashx.cs-Datei
mit System;
using System.Web.SessionState;
mit System.IO;
unter Verwendung von System.Web;
Namespace AspNetResources.Owc
{
öffentliche Klasse ChartHandler: IHttpHandler, IReadOnlySessionState
{
öffentlicher bool IsReusable
{
get { return true }
}
public void ProcessRequest (HttpContext ctx)
{
string chartID = ctx.Request.QueryString[0];
Array arr = (Array) ctx.Session [chartID]
;
ctx.Response.Expires = 0;
ctx.Response.Buffer = true;
ctx.Response.Clear ();
MemoryStream memStream = new MemoryStream ((byte[])arr);
memStream.WriteTo (ctx.Response.OutputStream);
memStream.Close ();
ctx.Response.ContentType = "image/png";
ctx.Response.StatusCode = 200;
ctx.Response.End ()
;
}
}