zoukankan      html  css  js  c++  java
  • 关于ashx的基本应用

    因为公司项目的原因,对里面的一些ashx文件不是很明白,以前也从来没接触过。所以自己到网上查了下,然后自己写了一些例子,在此做个记录,也顺便给初学的人提供一些方便。

    下面是正文:

    对于ashx,网上比较多的说法是用来显示图片。然后我试着做了个,确实太简单了。

    1、显示图片

    aspx代码:

    <img src="Handler/Handler2.ashx" alt="这是ashx生成的" />

    ashx代码:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    
    namespace WebApplication1.Handler
    {
        /// <summary>
        /// Handler2 的摘要说明
        /// </summary>
        public class Handler2 : IHttpHandler
        {
    
            public void ProcessRequest(HttpContext context)
            {
                context.Response.ContentType = "image/png";
                //context.Response.Write("Hello World");
                context.Response.WriteFile("~/Images/1.jpg");
            }
    
            public bool IsReusable
            {
                get
                {
                    return false;
                }
            }
        }
    }

    图片路径正确就行。当然,图片路径可以从数据库中读取,可以传递参数选择图片。具体的不多说了,因为ashx就是一个处理程序的文件,这里面进行逻辑判断业务操作然后返回给页面。

    本来我是想先实现文字输出的,可苦于不知道用什么来呈现文字,即找不到文字显示的途径,只好先实现了图片显示。接下来就是实现文字输出的时刻!

    2、文字输出

    aspx代码:

    <script src="Handler/Handler1.ashx" type="text/javascript"></script>

    ashx代码:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.IO;
    
    namespace WebApplication1.Handler
    {
        /// <summary>
        /// Handler1 的摘要说明
        /// </summary>
        public class Handler1 : IHttpHandler
        {
    
            public void ProcessRequest(HttpContext context)
            {
                context.Response.ContentType = "text/plain";
                //context.Response.Write("alert('hi')");
                context.Response.Write("document.write('HELLO WORLD!!')");
            }
    
            public bool IsReusable
            {
                get
                {
                    return false;
                }
            }
        }
    }

    这样既实现了文字输出,aspx代码放在<body>标签里即可,类似与这样:

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="WebApplication1.WebForm1" %>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title>测试ashx</title>
    </head>
    <body>
        <script src="Handler/Handler1.ashx" type="text/javascript"></script>
        <form id="form1" runat="server">
        <div>
        </div>
        </form>
    </body>
    </html>

    当然你也可以放在<div>标签中。

    因为ashx文件不返回html内容,所以一定要写全。如

    context.Response.Write("document.write('HELLO WORLD!!')");

    另外还有一种页面呈现方式<还有其他的>,用文件流的方式输出成标准的html格式,然后用iframe来引用到需要呈现的页面。

    aspx页面:

        <div>
        <iframe src="Handler/Handler3.ashx"></iframe>
        </div>

    ashx页面:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.IO;
    using System.Web;
    
    namespace WebApplication1.Handler
    {
        /// <summary>
        /// Handler3 的摘要说明
        /// </summary>
        public class Handler3 : IHttpHandler
        {
    
            public void ProcessRequest(HttpContext context)
            {
    
                // Set up the response settings
                context.Response.ContentType = "text/html";
                context.Response.Cache.SetCacheability(HttpCacheability.Public);
                context.Response.BufferOutput = false;
    
                Stream stream = null;
    
                string html = "<html><body>成功: test of txt.ashx</body></html>";
                byte[] html2bytes = System.Text.Encoding.GetEncoding("UTF-8").GetBytes(html);
    
                stream = new MemoryStream(html2bytes);
    
                if (stream == null)
                    stream = new MemoryStream(System.Text.Encoding.ASCII.GetBytes("<html><body>get Nothing!</body></html>"));
    
                //Write text stream to the response stream
                const int buffersize = 1024 * 16;
                byte[] buffer = new byte[buffersize];
                int count = stream.Read(buffer, 0, buffersize);
                while (count > 0)
                {
                    context.Response.OutputStream.Write(buffer, 0, count);
                    count = stream.Read(buffer, 0, buffersize);
                }
            }
    
            public bool IsReusable
            {
                get
                {
                    return false;
                }
            }
        }
    }

    在上面这个例子中,<body>中的内容完全可以自己根据需要进行整理,比如从数据库获取。

    就不一一介绍了,总之ashx可以让代码更加整洁,在很多时候还是很方便的,比如显示图片的时候。

  • 相关阅读:
    Python基础第十五天:初始面向对象
    Python基础第十四天:模块和包
    支付宝支付,邮件发送,短信推送,微信推送
    滑动验证
    Haystack全文检索
    Celery完成定时任务
    scrapy框架
    手机app抓包
    MongoDB数据库
    xpath解析数据
  • 原文地址:https://www.cnblogs.com/ygyxinyu/p/2918961.html
Copyright © 2011-2022 走看看