1.伪静态(URL重写)
可引用 URLRewriter.dll 进行操作
在web.config中配置如下
<RewriterConfig>
<Rules>
<RewriterRule>
<LookFor>~/default(\d+)\.aspx</LookFor><!--重写规则 使用正则表达式-->
<SendTo>~/default.aspx?id=$1</SendTo><!--替换规则 $1替换第一个转义字符 如此类推 -->
</RewriterRule>
<!--如上规则是 访问default11时 就当是访问default.aspx?id=11-->
<RewriterRule>
<LookFor>~/index\.html</LookFor>
<SendTo>~/default.aspx</SendTo>
</RewriterRule>
<!--如上规则是 访问index.html时 访问default.aspx-->
</Rules>
</RewriterConfig>
<httpHandlers>
<add verb="*" path="*.aspx" type="URLRewriter.RewriterFactoryHandler, URLRewriter" />
<add verb="*" path="*.html" type="URLRewriter.RewriterFactoryHandler, URLRewriter" />
</httpHandlers>
在重写后的url里如果产生回发用户浏览器中将会显示该aspx文件实际的地址,为了更加友好不显示真实URL地址,解决办法如下
2 using System.IO;
3 using System.Web;
4 using System.Web.UI;
5 namespace URL
6 {
7 public class OLPage : Page
8 {
9 public OLPage()
10 {}
11 protected override void Render(HtmlTextWriter writer)
12 {
13 if (writer is System.Web.UI.Html32TextWriter)
14 {
15 writer = new FormFixerHtml32TextWriter(writer.InnerWriter);
16 }
17 else
18 {
19 writer = new FormFixerHtmlTextWriter(writer.InnerWriter);
20 }
21 base.Render(writer);
22 }
23 }
24
25 internal class FormFixerHtml32TextWriter : System.Web.UI.Html32TextWriter
26 {
27 private string _url; // 假的URL
28
29 internal FormFixerHtml32TextWriter(TextWriter writer):base(writer)
30 {
31 _url = HttpContext.Current.Request.RawUrl;
32 }
33
34 public override void WriteAttribute(string name, string value, bool encode)
35 {
36 if (_url != null && string.Compare(name, "action", true) == 0)
37 {
38 value = _url;
39 }
40 base.WriteAttribute(name, value, encode);
41
42 }
43 }
44
45 internal class FormFixerHtmlTextWriter : System.Web.UI.HtmlTextWriter
46 {
47 private string _url;
48 internal FormFixerHtmlTextWriter(TextWriter writer):base(writer)
49 {
50 _url = HttpContext.Current.Request.RawUrl;
51 }
52
53 public override void WriteAttribute(string name, string value, bool encode)
54 {
55 if (_url != null && string.Compare(name, "action", true) == 0)
56 {
57 value = _url;
58 }
59 base.WriteAttribute(name, value, encode);
60 }
61 }
62
63 }
64
把这个文件编译成dll,并在你的项目中引用它。
然后把项目中的所有aspx文件对应的cs文件中的继承page类的代码改写为继承OLPage。
例如
public
改写为
public
这样就解决回发问题。
编译*.dll方法:/t:library
2.静态化(模板替换)
templet.htm文件
<head>
<title>无标题页</title>
</head>
<body>
标题:$title<br/>
内容:$content
</body>
</html>
模板替换处理的简单方法(可自行拓展)
{
string path = HttpContext.Current.Server.MapPath("test/");
Encoding code = Encoding.GetEncoding("gb2312");
// 读取模板文件
string temp = HttpContext.Current.Server.MapPath("templet.htm");
StreamReader sr = null;
StreamWriter sw = null;
string str = "";
try
{
sr = new StreamReader(temp, code);
str = sr.ReadToEnd(); // 读取文件
}
catch (Exception exp)
{
HttpContext.Current.Response.Write(exp.Message);
HttpContext.Current.Response.End();
sr.Close();
}
string htmlfilename = DateTime.Now.ToString("yyyyMMddHHmmss") + ".html";
// 替换内容
// 这时,模板文件已经读入到名称为str的变量中了
str = str.Replace("$title", "这是个测试标题"); //模板页中的ShowArticle
str = str.Replace("$content", "这是个测试内容!");
// 写文件
try
{
sw = new StreamWriter(path + htmlfilename, false, code);
sw.Write(str);
sw.Flush();
sw.Close();
return htmlfilename;
}
catch (Exception ex)
{
HttpContext.Current.Response.Write(ex.Message);
HttpContext.Current.Response.End();
sw.Close();
}
return "";
}
调用此方法 后 就会在test文件夹下产生一个静态HTML文件!