Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1071453
  • 博文数量: 403
  • 博客积分: 10272
  • 博客等级: 上将
  • 技术积分: 4407
  • 用 户 组: 普通用户
  • 注册时间: 2012-02-24 14:22
文章分类

全部博文(403)

文章存档

2012年(403)

分类: 系统运维

2012-03-22 17:59:10

我对HttpHandler的理解

HttpHandler 是Framework中提供用于对Http请求的编程。而实现这一操作的主要接口是IHttpHandler和IHttpModule.

利用HttpHandler 实现在不同的语言下调用不同的Css文件

创建HttpHandlerCss.cs 文件

View Code
public class HttpHandlerCss : System.Web.IHttpHandler, IRequiresSessionState
{
public bool IsReusable
{
get { return true; }
}
public void ProcessRequest(System.Web.HttpContext context)
{

string File = context.Request.PhysicalPath;
string Url = context.Request.RawUrl;
HttpRequest req = context.Request;
bool isnew = string.IsNullOrEmpty(context.Request.Headers["If-Modified-Since"]);
DateTime cachedate = isnew ? DateTime.MinValue : DateTime.Parse(context.Request.Headers["If-Modified-Since"]).ToUniversalTime();
string strlan = req.Headers["Accept-Language"];
string[] lans = strlan.Split(',');
string firstlan = lans[0];
int ipos = firstlan.IndexOf(';');
if (ipos != -1)
{
firstlan = firstlan.Substring(0, ipos).Trim();

}
string filename;
if (firstlan == "zh-CN" || firstlan == "zh")
{

filename = File;

}
else
{
filename = File.Replace("App_Themes", "App_ThemesOther");
}
DateTime Lastmodified = new FileInfo(filename).LastWriteTimeUtc;
if (Lastmodified <= cachedate)
{
context.Response.StatusCode = 304;
}
else
{
context.Response.ContentType = "text/css";
context.Response.AddHeader("Last-Modified", Lastmodified.ToString("r"));
context.Response.TransmitFile(filename);
}
}

}


由上面的代码可以看出,IHttpHandler要求实现一个方法和一个属性

ProcessRequest方法中应该放置我们处理请求的主要代码。

IsReusable属性,获取一个值,该值指示其他请求是否可以使用 IHttpHandler 实例,我把它设置成true。

通过上面的代码还可以看出我使用了Lastmodified

Lastmodified :标记此文件在服务期端最后被修改的时间,格式类似这样:Last-Modified: March, 12 May 2012 18:53:33 GMT,来判断客户端在第二次请求此URL时,根据 HTTP 协议的规定,浏览器会向服务器传送 If-Modified-Since 报头,询问该时间之后文件是否有被修改过。如果服务器端的资源没有变化,则自动返回 HTTP 304 状态码,内容为空,这样就节省了传输数据量。当服务器端代码发生改变或者重启服务器时,则重新发出资源,返回和第一次请求时类似。从而保证不向客户端重复发出资源,也保证当服务器有变化时,客户端能够得到最新的资源。

TransmitFile

利用TransmitFile将指定的文件直接写入 HTTP 响应输出流,而不在内存中缓冲该文件。

对Web.config 进行配置

< system.web>

"*" path ="*.css" type ="CryptoGateway.WebPages.HttpHandlerCss,CSSHttpHandler" validate="true"/>

阅读(579) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~