HttpHandlerで異なるCssファイルを呼び出す

7093 ワード

私の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は1つの方法と1つの属性を実現することを要求している.
プロセスリクエストメソッドには、リクエストを処理する主なコードを配置する必要があります.
IsReusableプロパティは、他のリクエストがIHttpHandlerインスタンスを使用できるかどうかを示す値を取得し、trueに設定します.
利用HttpHandler 调用不同的Css文件_第1张图片
HttpRequestで異なる言語を取得し、異なるCssファイルを返します.
上のコードからLastmodifiedを使ったこともわかります
Lastmodified:このファイルがサービス期間の最後に変更された時間をマークし、形式は類似している:Last-Modified:March,12 May 2012 18:53:33 GMTで、クライアントがこのURLを2回目に要求したとき、HTTPプロトコルの規定に従って、ブラウザはIf-Modified-Sinceヘッダをサーバに転送し、その時間後にファイルが変更されたかどうかを尋ねる.サーバ側のリソースに変化がなければ、HTTP 304のステータスコードが自動的に返され、コンテンツが空になり、伝送データ量が節約される.サーバ側コードが変更されたり、サーバが再起動されたりすると、リソースが再発行され、最初のリクエストと同様に戻ります.これにより、クライアントにリソースを繰り返し発行しないことを保証し、サーバが変化すると、クライアントが最新のリソースを得ることができることを保証します.
TransmitFile
TransmitFileを使用して、指定したファイルをメモリにバッファリングせずにHTTP応答出力ストリームに直接書き込みます.
はいWeb.コンフィギュレーション
 
< system.web> 
<httpHandler>
<add verb ="*" path ="*.css" type ="CryptoGateway.WebPages.HttpHandlerCss,CSSHttpHandler" validate="true"/>
</HttpHandler>
</system.web>

 
ソースのダウンロード:http://files.cnblogs.com/changminglong/HttpHandlerCss.rar