Asp.Net 2.0 の新機能は、組み込みの URL 書き換えサポートです。この新機能を調べたところ、正規表現のサポートが欠けていることがわかりました。これが URL マッパーの真のポイントです。 ScottGlu は自身のブログで、Asp.Net チームがこの機能を実装しなかった理由を説明しています。基本的に彼らは、フル機能バージョンでは次の IIS 7.0 の新機能、特にすべてのコンテンツ タイプ (イメージとディレクトリ) のサポートを活用する必要があることに気づきました。
とにかく、Asp.Net で正規表現をサポートする URL 書き換えモジュールを実装するのは非常に簡単です。このために手早く簡単な HttpModule を書きました。この魔法全体は、HttpModule 内の数行で実行されます。
1 public void Rewrite_BeginRequest(object sender, System.EventArgs args) {
2 文字列 strPath = HttpContext.Current.Request.Url.AbsolutePath;
3 UrlRedirection oPR = new UrlRedirection();
4 文字列 strURL = strPath;
5 文字列 strRewrite = oPR.GetMatchingRewrite(strPath);
6 if (!String.IsNullOrEmpty(strRewrite)) {
7 strURL = strRewrite;
8 } その他 {
9 strURL = strPath;
10 }
11 HttpContext.Current.RewritePath("~" + strURL);
12 }
コードは一目瞭然です。 Asp.Net エンジンによって要求が処理されると、モジュールは XML で正規表現の一致を確認します。 Web.config を使用して一致ルールを保存する URL 書き換えエンジンを数多く見てきましたが、私は追加の XML ファイルを使用することを好みます。書き換えルール ファイルは次のようになります。
1 <?xml version="1.0"coding="utf-8"standalone="yes"?>
2 <URL書き換え>
3 <ルール名="カテゴリ ページ">
4 <url>/([a-zA-Z][w-]{1,149}).aspx</url>
5 <リライト>/Default.aspx?Category=$1</リライト>
6 </ルール>
7 <ルール名="商品ページ">
8 <url>/([a-zA-Z][w-]{1,149})/([a-zA-Z][w-]{1,149}).aspx</url>
9 <rewrite>/Default.aspx?Category=$1&Item=$2</rewrite>
10 </ルール>
11 </urlrewrites>
GetMatchingRewrite() メソッドに実装されているルール マッチング ルーチンは、非常にシンプルで軽量です。
1 public string GetMatchingRewrite(string URL) {
2 文字列 strRtrn = "";
3
4 System.Text. RegularExpressions.Regex oReg;
5
6 foreach (ルール内のリダイレクトルールまたはルール) {
7
8 Reg = 新しい Regex(oRule.URL);
9 マッチ oMatch = oReg.Match(URL);
10
11 if (oMatch.Success) {
12 strRtrn = oReg.Replace(URL, oRule.Rewrite);
13 }
14
15 }
16 strRtrn を返します。
17 }
この書き換えエンジンを使用したサンプルプロジェクトをアップロードしました。 HttpModule とそのヘルパー クラスは App_Code フォルダー内にあります。このコードがお役に立てば幸いです。ご質問がある場合は、このエントリにコメントを残してください。コーディングを楽しんでください!
-------------------------------------------------- ------------------------------
DEVEL.oping.net より
投稿日: 2006-04-26 14:17 徐灿钊Asp.net专栏 阅读(48) 评论(1) 编辑 收藏 收藏至365Key 所属分类: .net2.0
评论:
# re: ASP.NET 2.0 の Regex を使用した URL 書き換え (asp.net2.0 では正规表达式建立 URL 重写) 2006-04-26 20:22 | AXii
哈哈哈,测试後 1 public void Rewrite_BeginRequest(object sender, System.EventArgs args)
2 {
3 文字列 appPath = HttpContext.Current.Request.ApplicationPath;
4 HttpContext.Current.Response.Write(appPath + "<br />");
5
6 文字列 strPath = HttpContext.Current.Request.Url.AbsolutePath;
7 HttpContext.Current.Response.Write(strPath + "<br />");
8
9 strPath = strPath.Substring(appPath.Length);
10
11 HttpContext.Current.Response.Write(strPath + "<br />");
12
13 UrlRedirection oPR = new UrlRedirection();
14
15 文字列 strURL = strPath;
16
17 文字列 strRewrite = oPR.GetMatchingRewrite(strPath);
18
19 if (!String.IsNullOrEmpty(strRewrite))
20 {
21 strURL = strRewrite;
22 }
23 その他
24 {
25 strURL = strPath;
26 }
27
28 HttpContext.Current.RewritePath("~" + strURL);
29 } この処理法は、仮想パスの問題を効果的に解決できるように、2、3、9行目で追加されたものであることに注意してください。
2、無法满足页面回播的问题!如何解决,还请您来修改:):