في شهر سبتمبر من العام الماضي، كنت أعمل على وظيفة إنشاء الصور. بالطبع، تم وضع الصور التي تم إنشاؤها في دليل معين على الخادم وحذفها بعد فترة من الوقت لقد كان الأمر مزعجًا للغاية، لكنني وجدت هذه الفقرة، ورأيت اليوم كيفية استخدام ملف .ashx لمعالجة IHttpHandler لتنفيذ إرسال البيانات النصية والثنائية. وفجأة وجدت أن هذا الاستخدام تمت مناقشته جيدًا، وربما لم تقدمه الوثيقة الصينية الرسمية بالتفصيل، وأوصت بطريقة أخرى بدلاً من ذلك.
//----------------------------------------
// اختر تنسيق الصورة المفضل لديك
//--------------------------------
byte[] byteArr = (byte[]) oChartSpace.GetPicture("png", 500, 500);
//----------------------------------------
// قم بتخزين صورة المخطط في الجلسة ليتم التقاطها بواسطة HttpHandler لاحقًا
//------------------------------------------
HttpContext ctx = HttpContext.Current;
String ChartID = 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 الفعل = "*" المسار = "*.ashx" type = "AspNetResources.Owc، ChartHandler " validate = "false" /> /*ChartHandler هو تجميع التعليمات البرمجية الذي تم إنشاؤه بعد تجميع ashx.cs*/
<!--بما أننا نحصل على كافة الطلبات بعد ذلك، تأكد من أن Error.aspx لا يعتمد على .Text -->
<إضافة فعل = "*" مسار = "Error.aspx" نوع = "System.Web.UI.PageHandlerFactory" />
</httpHandlers>
لا يهم أي واحد تستخدمه. فالأخير يكون أكثر ملاءمة بمجرد تكوينه، بغض النظر عن المسار. في الواقع، تطبيق هذه الفكرة معروف جيدًا في .text، لكن اتجاه التطبيق مختلف .
رمز ملف ashx.cs
باستخدام النظام؛
باستخدام System.Web.SessionState؛
باستخدام System.IO؛
باستخدام System.Web
مساحة الاسم AspNetResources.Owc
{
فئة عامة ChartHandler: IHttpHandler، IReadOnlySessionState
{
المنطق العام قابل لإعادة الاستخدام
{
الحصول على {العودة الحقيقية}
}
طلب معالجة الفراغ العام (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 ()
;
}
}