知识大全 ASP.NET 页面aspx之扩展
Posted 实体
篇首语:日日行,不怕千万里;时时学,不怕千万卷。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 ASP.NET 页面aspx之扩展相关的知识,希望对你有一定的参考价值。
ASP.NET 页面aspx之扩展 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
需求 某网站因业务扩展 需拆分出另一个站点 新旧站点具有相同的内容 但具体栏目表现形式上不一样 原网站运行多年 有大量的图片 这些图片也会在新站上使用 任务是 保证两个网站图片内容同步 即原来的站点增加一个图片 新站点即可使用这个图片
分析 假设两个站点的域名分别为 /和/ 将图片分别拷到两台服务器 以后上传图片同时上传两台服务器 这种方法虽简单 但是占用巨大的磁盘空间 而且维护麻烦
在/的页面上直接写/的引用 这种方式类似 图片盗链 但工作量也很大 每加一个图片都要改链接 日后维护工作也很大
一台服务器保留图片 另外一台服务器通过IIS的网络共享方式访问图片 但开放文件共享对服务器的安全将构成威胁
剖析页面运行原理
当浏览器向IIS请求页面时 IIS会把请求转交给ASP NET HTTP管道 HTTP管道是一组被控对象(HTPPModel) 这些对象按顺序处理请求并把这些请求转换成一般的HTML文本 HTTP管道的入口是HttpRuntime类的实体 HttpRuntime类实体从内存程序池中选择一个HttpApplication对象 HttpApplication的主要工作是寻找这样的类实体(HttpHandler)使之能够处理请求 应用程序能在Web Config里对这个Http处理句柄映射列表进行重定义 下列nfig中的句柄 定义了 jpg资源请求的处理句柄
<handlers>
<add verb= * path= * jpg type= HandlerTest />
</handlers>
Verb列表可以是逗号分隔的HTTP谓词列表(例如 GET PUT POST ) 也可以是通配符 * path路径属性可以包含单个URL路径或简单的通配符字符串(例如* aspx) type指定逗号分隔的类/程序集组合 ASP NET首先在应用程序的专用\\bin目录中搜索程序集DLL 然后在系统程序集缓存中搜索程序集DLL
从代码层面来看 要实现自定义的HTTP处理句柄 只需要实现一个IHandler接口 其中包括IsReusable和ProcessRequest两个方法 IsReusable方法用于返回应用程序池中是否存在可重用的类实体的信息 利用这个方法可以同时为多个请求服务 而ProcessRequest方法则接受一个HttpContext实体作为参数 从而得到对Request和Response的存取权限
处理思路 当对的请求到达IIS时 ASP NET初始化一个图像生成器类 在这个类中 通过HTTP端口把取回来 再将图像流返回到HTTP响应中 接收并处理HTTP请求是在ProcessRequest方法中完成的 客户端并不知道实际发生了什么事情
代码
using System;
using System Net; using System IO; using System Web; using System Drawing; using System Drawing Imaging;
namespace WebHttpModule
public class ImageLink : IHttpHandler
public void ProcessRequest(HttpContext context)
string url = context Request Url ToString(); //if request is / then changed to request / url = url Replace( / / );
//如果使用的相对路径 就要手工加入完整的url路径if (url IndexOf( / ) <= )
url = / + url;
//create one WebClient object used to request the image of /
WebClient client = new WebClient();
Stream stream = client OpenRead(url);
Image image = Image FromStream(stream); context Response ContentType = image/jpeg ; //将图像写入HTTP响应 返回给客户端请求image Save(context Response OutputStream ImageFormat Jpeg);
image Dispose();
public bool IsReusable
get
return true;
配置
将上面的代码编译为ImageLink dll 在b服务器建立和a机器相同路径的图片目录images 并在其下建立bin目录 将ImageLink dll拷进去 在b服务器中吧images目录设定为一个应用程序 这样才能针对此应用程序设定相应的程序映射(添加相应的扩展) 以把jpg后缀的请求发送到ASP NET去处理
在Web Config中配置代码来设定Handlers 我们现在要做的把对images目录下的jpg文件的请求转到ImageLink来处理 因此最终的设定如下
<handlers>
<add verb= * path= images/* jpg type= WebHttpModule ImageLink ImageLink />
</handlers>
将nfig拷到images目录下
cha138/Article/program/net/201311/12780相关参考
WebForm_aspx内容如下:复制代码代码如下:<%@PageLanguage="C#"AutoEventWireup="true"CodeBehind="WebForm_aspxcs"
ASP.NET四种页面导航方式之比较与选择 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 在AS
ASP.NET验证码(.aspx) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! usingSy
ASP.NET服务器控件之视图状态 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 为Web页面及
ASP.NET揭秘ASP.NET页面的结构 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!TheSt
ASP.NET2.0服务器控件之创建复杂属性 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 页面
Asp.Net中动态页面转静态页面 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 关于在AspN
知识大全 IIS处理Asp.net请求和 Asp.net页面生命周期
IIS处理Asp.net请求和Asp.net页面生命周期 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下
ASP.NET页面间数据传递 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!引言 Web页面是无状
ASP.NET页面对象模型 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 介绍