ASP.NET----模块和处理程序

本文介绍如何使用ASP.NET中的HttpHandler动态为图片添加水印,包括处理流程、代码实现及配置方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.HttpModule和HttpHandler

(1)事实上我们每请求一个aspx页面都经历了同样的过程,只不过我们没有察觉而已
(2)一个请求可以经过多个 Module但是最终只能被一个Handler处理

2.HttpHandler的使用

     在web应用程序项目中添加一般应用程序

     一般处理程序页面及注释

3.水印的实现(一般有一下三种方法)

(1)直接编辑每张图片-----------(需要大量的人力。
(2)编程实现批量编辑图片----------(节省人力,效率高,但原始图片丢失了。
(3)在显示图片时,动态添加数字水印效果---------(使用HttpHandler

4.使用HttpHandler方式是实现水印

    前台界面
<div>

        <img alt="" class="style1" src="ProductImgs/1.jpg" />
        <img alt="" class="style2" src="ProductImgs/2.jpg" />
        <img alt="" class="style1" src="ProductImgs/3.jpg" />
        <img alt="" class="style2" src="ProductImgs/4.jpg" />
    </div>
   <div>
        <img alt="" class="style1" src="Handler1.ashx?id=1" />
        <img alt="" class="style2" src="Handler1.ashx?id=2" />
        <img alt="" class="style1" src="Handler1.ashx?id=3" />
        <img alt="" class="style2" src="Handler1.ashx?id=4" />
    </div>

后台代码实现

 public void ProcessRequest(HttpContext context)
        {
            //获取图片路径
           string  imgs="~/ProductImgs/";
            //获取要添加数字水印的图片
           string file = context.Request.MapPath(imgs + context.Request.QueryString["id"] + ".jpg");
           //string file = context.Request.PhysicalPath;
           Image img = null;
            //判断图片的物理地址是否存在
           if (File.Exists(file))
           {
               //加载图片
               img = Image.FromFile(file);
               //定义画布
               Graphics grap = Graphics.FromImage(img);
               //合成水印图片
               grap.DrawString("水印",new Font("微软雅黑",20),Brushes.Red,img.Width-50,img.Height-30);
               //释放水印
               grap.Dispose();
           }
           else
           {

           }
            //定义输出类型
           context.Response.ContentType = "image/jpeg";
            //保存图片到输出流
           img.Save(context.Response.OutputStream,ImageFormat.Jpeg);
            //释放画布
           img.Dispose();
            //输出结束
           context.Response.End();

        }

5.全局Handler方式实现水印

5.1实现思路分析

     (1)修改配置信息,将所有对.JPG内容的访问转到HttpHandler处理程序
     (2)获得访问请求,得到用户访问的图片路径;
     (3)根据请求的路径,查找相对应的DVD封面图片;
     (4)将网站标识“绘制”在DVD封面图片的左下角;
     (5)修改程序的输出类型,并将组合出的新图片输出。

5.2实现及代码

<div>

        <img alt="" class="style1" src="ProductImgs/1.jpg" />
        <img alt="" class="style2" src="ProductImgs/2.jpg" />
        <img alt="" class="style1" src="ProductImgs/3.jpg" />
        <img alt="" class="style2" src="ProductImgs/4.jpg" />
    </div>
  public void ProcessRequest(HttpContext context)
        {
            //获取图片路径
           string  imgs="~/ProductImgs/";
            //获取要添加数字水印的图片
           //string file = context.Request.MapPath(imgs + context.Request.QueryString["id"] + ".jpg");
           string file = context.Request.PhysicalPath;
           Image img = null;
            //判断图片的物理地址是否存在
           if (File.Exists(file))
           {
               //加载图片
               img = Image.FromFile(file);
               //定义画布
               Graphics grap = Graphics.FromImage(img);
               //合成水印图片
               grap.DrawString("水印",new Font("微软雅黑",20),Brushes.Red,img.Width-50,img.Height-30);
               //释放水印
               grap.Dispose();
           }
           else
           {

           }
            //定义输出类型
           context.Response.ContentType = "image/jpeg";
            //保存图片到输出流
           img.Save(context.Response.OutputStream,ImageFormat.Jpeg);
            //释放画布
           img.Dispose();
            //输出结束
           context.Response.End();

        }

修改Web.config文件的httpHandlers

(1)verb:谓词GETPOSTFTP等。
(2)path:访问路径,此处表示所有针对“ProductImgs/*.jpg”路径的的请求都将交给PicCoverHandler类进行处理。
(3)type:指定的处理程序(类)。 

6.在IIS配置处理程序

(1)在IIS上使用该方式要做其他处理

(2)开发服务器仅提供最简单的Web服务器功能,它不对请求的内容做任何处理,而是直接将所有的请求转交给ASP.NET处理;
(3)IIS功能比较完善,可以独立处理一些访问请求,比如.html.jpg等的访问不会提交给ASP.NET来处理





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值