ASP.NET伪静态实现

在asp.net下,如何自己写代码来实现伪静态呢?如何重写url地址呢?

例如:本来aspx的页面地址是:/default.aspx?id=1,我要重写成这样:/index-1.html。那如何实现?

思路如下:利用HttpModule来实现。

 

1.新建文件,URLHttpModel.cs,并实现IHttpModule接口。代码如下:

[csharp] view plain copy
 
  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Text.RegularExpressions;  
  5. using System.Web;  
  6.   
  7. namespace Web.HttpModel.Demo  
  8. {  
  9.     public class URLHttpModel : IHttpModule  
  10.     {  
  11.         public void Init(HttpApplication context)  
  12.         {  
  13.             context.BeginRequest += Context_BeginRequest;  
  14.         }  
  15.   
  16.         private void Context_BeginRequest(object sender, EventArgs e)  
  17.         {  
  18.             HttpApplication app = (HttpApplication) sender;  
  19.             HttpContext context = app.Context;  
  20.             string requestPage = context.Request.Path.ToLower();  
  21.             var newPattern = "/index-(\d+).html";  
  22.             if (Regex.IsMatch(requestPage, $"^{newPattern}$", RegexOptions.None | RegexOptions.IgnoreCase))  
  23.             {  
  24.                 string queryString = Regex.Replace(requestPage, newPattern, "id=$1", RegexOptions.None | RegexOptions.IgnoreCase);  
  25.                 context.RewritePath("/Default.aspx", string.Empty, queryString);  
  26.             }  
  27.         }  
  28.   
  29.         public void Dispose()  
  30.         {  
  31.               
  32.         }  
  33.     }  
  34. }  

2.然后在web.config文件中,配置此Modeule,代码如下:

[csharp] view plain copy
 
  1. <httpModules>  
  2.       <add name="URLModel" type="Web.HttpModel.Demo.URLHttpModel,Web.HttpModel.Demo"/>  
  3. </httpModules>  

3,然后运行项目,输入如下地址,/index-1.html,可以看到如下的效果:

 
 
原文地址:https://www.cnblogs.com/jjg0519/p/6337156.html