ASP.NET网站开发--用户控件与HttpHandler
程序员文章站
2024-03-25 20:48:34
...
1.用户控件
简单的来说,用户控件就是能够在其中放置标记和Web服务器的容器,可以被看作一个独立的单元,拥有自己的属性和方法,并且可以被放入到ASPX页面上。应为它的工作方式跟ASP.NET很相似,也可以理解:当一个Web窗体被当作Server控件使用时,这个Web窗体便是用户控件。
1.1用户控件与页面的区别
后缀名:用户控件以.ascx为后缀,页面后缀是.aspx;
指令:用户控件@Control,页面是@Page;
继承:用户控件继承来自System.Web.Ul.UserControl,而页面继承自System.Web.Ul.Page
访问:用户控件不能直接访问,页面可以;
1.2用户控件与母版页的区别
功能:母版提供一些列页面的页面框架,用户控件提供页面内容中的细节;
母版页:用户控件内容页的框架,每一个页面只能使用一个母版页;
用户控件:用户控件为母版页,内容页,普通页甚至其他用户控件提供内容,且可以使用多个用户控件;
2.模块和处理程序
模块和处理程序就是,在网站中我们基于著作权的保护,对站点中提供的图片添加网站的标识。
2.1使用指定Handler方式实现数字水印
Default.aspx页面:<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication1._Default" %>
<!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></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Image ID="Image1" runat="server" ImageUrl="~/ProductImgs/1.jpg" />
<asp:Image ID="Image2" runat="server" ImageUrl="~/ProductImgs/2.jpg" />
<asp:Image ID="Image3" runat="server" ImageUrl="~/ProductImgs/3.jpg" />
<asp:Image ID="Image4" runat="server" ImageUrl="~/ProductImgs/4.jpg" />
<asp:Image ID="Image9" runat="server" ImageUrl="~/ProductImgs/default.jpg" />
</div>
<div>
<asp:Image ID="Image5" runat="server" ImageUrl="~/Handler1.ashx?id=1" />
<asp:Image ID="Image6" runat="server" ImageUrl="~/Handler1.ashx?id=2" />
<asp:Image ID="Image7" runat="server" ImageUrl="~/Handler1.ashx?id=3" />
<asp:Image ID="Image8" runat="server" ImageUrl="~/Handler1.ashx?id=4" />
</div>
</form>
</body>
</html>
Handler1.ashx页面:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
namespace WebApplication1
{
/// <summary>
/// Handler1 的摘要说明
/// </summary>
public class Handler1 : IHttpHandler
{
//private string IMG = "~/ProductImgs/";
public void ProcessRequest(HttpContext context)
{
Image Cover;
string Path = context.Request.MapPath(IMG + context.Request.Params["id"]+".jpg");
if (File.Exists(Path))
{
Cover = Image.FromFile(Path);
Graphics g = Graphics.FromImage(Cover);
g.DrawString("xiecan.cc", new Font("宋体",20), Brushes.Red,Cover.Width-90,Cover.Height-20);
g.Dispose();
}
else
{
Cover = null;
}
context.Response.ContentType = "image/jpeg";
Cover.Save(context.Response.OutputStream, ImageFormat.Jpeg);
Cover.Dispose();
context.Response.End();
}
public bool IsReusable
{
get
{
return false;
}
}
}
}
2.2使用全局Handler方式实现数字水印
Handler1.ashx页面:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.IO;
using System.Drawing;
using System.Drawing.Imaging;
namespace WebApplication1
{
/// <summary>
/// Handler1 的摘要说明
/// </summary>
public class Handler1 : IHttpHandler
{
private string IMGS = "/~ProductImgs/";
public void ProcessRequest(HttpContext context)
{
Image img;
string path = context.Request.PhysicalPath;
if (File.Exists(path))
{
img=Image.FromFile(path);
Graphics graphics = Graphics.FromImage(img);
graphics.DrawString("版权所有",new Font("宋体",20),Brushes.Red,img.Width-50,img.Height-20);
graphics.Dispose();
}
else
{
img = null;
}
context.Request.ContentType = "image/jpeg";
img.Save(context.Response.OutputStream, ImageFormat.Jpeg);
img.Dispose();
context.Response.End();
}
public bool IsReusable
{
get
{
return false;
}
}
}
}
Default.aspx页面:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication1._Default" %>
<!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></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Image ID="Image1" runat="server" ImageUrl="~/ProductImgs/1.jpg" />
<asp:Image ID="Image2" runat="server" ImageUrl="~/ProductImgs/2.jpg" />
<asp:Image ID="Image3" runat="server" ImageUrl="~/ProductImgs/3.jpg" />
<asp:Image ID="Image4" runat="server" ImageUrl="~/ProductImgs/4.jpg" />
<asp:Image ID="Image5" runat="server" ImageUrl="~/ProductImgs/default.jpg" />
</div>
</form>
</body>
</html>
Web页面:在httpHandlers里,添加一段代码:
<add verb="*" path="ProductImgs/*.jpg" type="WebApplication1.Handler1"/>
代码执行结果为: