利用HttpHandler 调用不同的Css文件

本文详细介绍了如何使用HttpHandler接口在不同的语言环境下加载不同的CSS文件,包括代码实现、关键代码解析以及配置步骤。通过Lastmodified机制判断资源是否需要更新,以及TransmitFile方法直接写入HTTP响应输出流,减少数据传输。

我对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。

通过 HttpRequest获得不同的语言,然后返回不同的Css 文件 。

通过上面的代码还可以看出我使用了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> 
<httpHandler>
<add verb ="*" path ="*.css" type ="CryptoGateway.WebPages.HttpHandlerCss,CSSHttpHandler" validate="true"/>
</HttpHandler>
</system.web>


 

源代码下载:http://files.cnblogs.com/changminglong/HttpHandlerCss.rar

 

转载于:https://www.cnblogs.com/changminglong/archive/2012/03/22/2411602.html

乐播投屏是一款简单好用、功能强大的专业投屏软件,支持手机投屏电视、手机投电脑、电脑投电视等多种投屏方式。 多端兼容与跨网投屏:支持手机、平板、电脑等多种设备之间的自由组合投屏,且无需连接 WiFi,通过跨屏技术打破网络限制,扫一扫即可投屏。 广泛的应用支持:支持 10000+APP 投屏,包括综合视频、网盘与浏览器、美韩剧、斗鱼、虎牙等直播平台,还能将央视、湖南卫视等各大卫视的直播内容一键投屏。 高清流畅投屏体验:腾讯独家智能音画调校技术,支持 4K 高清画质、240Hz 超高帧率,低延迟不卡顿,能为用户提供更高清、流畅的视觉享受。 会议办公功能强大:拥有全球唯一的 “超级投屏空间”,扫码即投,无需安装。支持多人共享投屏、远程协作批注,PPT、Excel、视频等文件都能流畅展示,还具备企业级安全加密,保障会议资料不泄露。 多人互动功能:支持多人投屏,邀请好友加入投屏互动,远程也可加入。同时具备一屏多显、语音互动功能,支持多人连麦,实时语音交流。 文件支持全面:支持 PPT、PDF、Word、Excel 等办公文件,以及视频、图片等多种类型文件的投屏,还支持网盘直投,无需下载和转格式。 特色功能丰富:投屏时可同步录制投屏画面,部分版本还支持通过触控屏或电视端外接鼠标反控电脑,以及在投屏过程中用画笔实时标注等功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值