Vers septembre de l'année dernière, je travaillais sur une fonction permettant de générer des images. Bien sûr, il existe de nombreuses méthodes. Les images générées étaient placées dans un certain répertoire sur le serveur et supprimées après un certain temps. , ce qui était trop gênant, mais j'ai trouvé ce paragraphe de code, aujourd'hui j'ai vu comment utiliser le fichier .ashx pour traiter IHttpHandler afin d'implémenter l'envoi de texte et de données binaires. Soudain, j'ai découvert que cette utilisation était bien discutée. Peut-être que le document officiel chinois ne l'a pas présenté en détail et a recommandé une autre méthode à la place.
//---------------------------------------------
// Choisissez votre format d'image préféré
//--------------------------------
octet[] byteArr = (octet[]) oChartSpace.GetPicture ("png", 500, 500);
//---------------------------------------------
// Stocke l'image du graphique dans la session pour qu'elle soit récupérée ultérieurement par un HttpHandler
//----------------------------------------------
HttpContext ctx = HttpContext.Current ;
string chartID = Guid.NewGuid ().ToString ();
ctx.Session [chartID] = byteArr;
imgHondaLineup.ImageUrl = string.Concat ("chart.ashx?", chartID);
Il y a la phrase suivante dans chart.ashx
<% @ WebHandler language="C#" class="AspNetResources.Owc.ChartHandler" codebehind="chart. ashx .cs" %>
En fait, vous pouvez également l'utiliser au lieu
d'ajouter<httpHandlers>
à <system.web> dans web.config
<add verb="*" path="*.ashx" type="AspNetResources.Owc, ChartHandler " validate="false" /> /*ChartHandler est l'assembly de code généré après la compilation d'ashx.cs*/
<!--Puisque nous récupérons toutes les requêtes après cela, assurez-vous que Error.aspx ne s'appuie pas sur .Text -->
<add verb="*" path="Error.aspx" type="System.Web.UI.PageHandlerFactory" />
</httpHandlers>
Peu importe celui que vous utilisez. Ce dernier est plus pratique une fois configuré, quel que soit le chemin. En fait, l'application de cette idée est bien connue en .text, mais la direction de l'application est différente. .
Le code du fichier ashx.cs
utilisant System ;
en utilisant System.Web.SessionState ;
en utilisant System.IO ;
en utilisant System.Web ;
espace de noms AspNetResources.Owc
{
classe publique ChartHandler : IHttpHandler, IReadOnlySessionState
{
public bool est réutilisable
{
obtenir { retourner vrai }
}
public void ProcessRequest (HttpContext ctx)
{
chaîne chartID = ctx.Request.QueryString[0];
Tableau arr = (Array) ctx.Session [chartID];
ctx.ClearError ();
ctx.Response.Expires = 0 ;
ctx.Response.Buffer = vrai ;
ctx.Response.Clear ();
MemoryStream memStream = nouveau MemoryStream ((octet[])arr);
memStream.WriteTo (ctx.Response.OutputStream);
memStream.Close ();
ctx.Response.ContentType = "image/png";
ctx.Response.StatusCode = 200 ;
ctx.Response.End ()
;
}
}