Sekitar bulan September tahun lalu, saya sedang mengerjakan fungsi untuk menghasilkan gambar. Tentu saja, ada banyak metode. Gambar yang dihasilkan ditempatkan di direktori tertentu di server dan dihapus setelah jangka waktu tertentu , yang terlalu merepotkan, tapi saya menemukan paragraf ini Kode, hari ini saya melihat cara menggunakan file .ashx untuk memproses IHttpHandler untuk mengimplementasikan pengiriman teks dan data biner. Tiba-tiba saya menemukan bahwa penggunaan ini telah dibahas dengan baik. Mungkin dokumen resmi Tiongkok tidak memperkenalkannya secara rinci, dan malah merekomendasikan metode lain.
//--------------------------
//Pilih format gambar favorit Anda
//--------------------------------
byte[] byteArr = (byte[]) oChartSpace.GetPicture ("png", 500, 500);
//--------------------------
// Simpan gambar grafik di Session untuk diambil oleh HttpHandler nanti
//--------------------------------------------
HttpContext ctx = HttpContext.Saat ini;
string chartID = Guid.NewGuid().ToString();
ctx.Sesi [chartID] = byteArr;
imgHondaLineup.ImageUrl = string.Concat ("chart.ashx?", chartID);
Ada kalimat berikut di chart.ashx
<% @ WebHandler bahasa = "C #" class = "AspNetResources.Owc.ChartHandler" codebehind = "chart. ashx .cs" %>
Bahkan, Anda juga dapat menggunakan ini daripada
menambahkan<httpHandlers>
ke <system.web> di web.config
<add verb="*" path="*.ashx" type="AspNetResources.Owc, ChartHandler " validasi="false" /> /*ChartHandler adalah rakitan kode yang dihasilkan setelah ashx.cs dikompilasi*/
<!--Karena kami menerima semua permintaan setelah ini, pastikan Error.aspx tidak bergantung pada .Text -->
<tambahkan kata kerja="*" path="Error.aspx" type="System.Web.UI.PageHandlerFactory" />
</httpHandlers>
Tidak masalah yang mana yang Anda gunakan. Yang terakhir lebih nyaman setelah dikonfigurasi, tidak peduli jalurnya. Faktanya, penerapan ide ini terkenal di .text, tetapi arah penerapannya berbeda .
Kode file ashx.cs
menggunakan System;
menggunakan Sistem.Web.SessionState;
menggunakan Sistem.IO;
menggunakan System.Web;
namespace AspNetResources.Owc
{
kelas publik ChartHandler : IHttpHandler, IReadOnlySessionState
{
bool publik Dapat Digunakan Kembali
{
dapatkan { kembalikan benar; }
}
Permintaan Proses kekosongan publik (HttpContext ctx)
{
string chartID = ctx.Request.QueryString[0];
Array arr = (Array) ctx.Sesi [chartID];
ctx.ClearError();
ctx.Respon.Kedaluwarsa = 0;
ctx.Respon.Buffer = benar;
ctx.Response.Clear();
MemoryStream memStream = MemoryStream baru ((byte[])arr);
memStream.WriteTo (ctx.Response.OutputStream);
memStream.Tutup();
ctx.Response.ContentType = "gambar/png";
ctx.Respon.StatusCode = 200;
ctx.Respon.Akhir()
;
}
}