知识大全 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

相关参考

知识大全 asp.net页面传值测试实例代码

  WebForm_aspx内容如下:复制代码代码如下:<%@PageLanguage="C#"AutoEventWireup="true"CodeBehind="WebForm_aspxcs"

知识大全 ASP.NET四种页面导航方式之比较与选择

ASP.NET四种页面导航方式之比较与选择  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  在AS

知识大全 ASP.NET验证码(.aspx)

ASP.NET验证码(.aspx)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  usingSy

知识大全 ASP.NET服务器控件之视图状态

ASP.NET服务器控件之视图状态  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  为Web页面及

知识大全 ASP.NET 揭秘 ASP.NET页面的结构

ASP.NET揭秘ASP.NET页面的结构  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!TheSt

知识大全 ASP.NET2.0服务器控件之创建复杂属性

ASP.NET2.0服务器控件之创建复杂属性  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  页面

知识大全 Asp.Net中动态页面转静态页面

Asp.Net中动态页面转静态页面  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  关于在AspN

知识大全 IIS处理Asp.net请求和 Asp.net页面生命周期

IIS处理Asp.net请求和Asp.net页面生命周期  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下

知识大全 ASP.NET页面间数据传递

ASP.NET页面间数据传递  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!引言  Web页面是无状

知识大全 ASP.NET 页面对象模型

ASP.NET页面对象模型  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  介绍