asp.net C#整个网站静态化,请教高手

dys_198102 2009-02-16 11:04:22
asp.net C#整站静态化应怎么做,在网站找到的有一些教程,但都一知半解。配置文件如下
<?xml version="1.0"?>
<!--
注意: 除了手动编辑此文件以外,您还可以使用
Web 管理工具来配置应用程序的设置。可以使用 Visual Studio 中的
“网站”->“Asp.Net 配置”选项。
设置和注释的完整列表在
machine.config.comments 中,该文件通常位于
\Windows\Microsoft.Net\Framework\v2.x\Config 中
-->
<configuration>
<configSections>
<section name="RewriterConfig" type="URLRewriter.Config.RewriterConfigSerializerSectionHandler, URLRewriter" />
</configSections>
<RewriterConfig>
<Rules>
<!-- 规则1 -->
<RewriterRule>
<LookFor>~/d(\d+)\.html</LookFor>
<SendTo>~/default.aspx?id=$1</SendTo>
</RewriterRule>
<!-- 规则2 -->
<RewriterRule>
<LookFor>~/k(\d+)\.html</LookFor>
<SendTo>~/default.aspx?key=$1</SendTo>
</RewriterRule>
</Rules>
</RewriterConfig>

<connectionStrings>
<add name="webtest" connectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\webtest.mdb" providerName="System.Data.OleDb"/>

<!--
用户数据库
<add name="webtest" connectionString="Data Source=61.152.93.48;Initial Catalog=test081125;Persist Security Info=True;User ID=test081125;Password=test081125" providerName="System.Data.SqlClient"/>
-->

</connectionStrings>
<appSettings/>
<system.web>
<!--AjaxPro_Start-->
<httpHandlers>
<remove verb="*" path="*.asmx"/>
<add verb="*" path="*.asmx" type="Microsoft.Web.Services.ScriptHandlerFactory" validate="false"/>
<add verb="POST,GET" path="ajaxpro/*.ashx" type="AjaxPro.AjaxHandlerFactory, AjaxPro.2"/>

</httpHandlers>
<httpModules>
<add type="URLRewriter.ModuleRewriter, URLRewriter" name="ModuleRewriter" />
</httpModules>
<!--AjaxPro_End-->
<!--
设置 compilation debug="true" 可将调试符号插入
已编译的页面中。但由于这会
影响性能,因此只在开发过程中将此值
设置为 true。
-->
<identity impersonate="false"/>
<compilation debug="true">
<assemblies>

<add assembly="System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add assembly="System.Web.Extensions.Design, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>

</assemblies></compilation>

<!--
通过 <authentication> 节可以配置 ASP.NET 用来
识别进入用户的
安全身份验证模式。
-->
<authentication mode="Windows"/>
<!--
如果在执行请求的过程中出现未处理的错误,
则通过 <customErrors> 节可以配置相应的处理步骤。具体说来,
开发人员通过该节可以配置
要显示的 html 错误页
以代替错误堆栈跟踪。
-->
<customErrors mode="Off" defaultRedirect="mycustompage.htm">
<error statusCode="403" redirect="NoAccess.htm" />
<error statusCode="404" redirect="FileNotFound.htm" />
</customErrors>

</system.web>
<system.codedom>
</system.codedom>
<!--
在 Internet 信息服务 7.0 下运行 ASP.NET AJAX 需要 system.webServer
节。对早期版本的 IIS 来说则不需要此节。
-->
<system.webServer>
</system.webServer>


</configuration>用的是URLRewriter.dll,但具体的不知道怎么弄
希望高手,能给个具体的代码示例。只要能实现全整静态化就行。
...全文
4715 107 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
107 条回复
切换为时间正序
请发表友善的回复…
发表回复
lifusong890910 2011-03-15
  • 打赏
  • 举报
回复
url 转发
xylzy 2011-01-17
  • 打赏
  • 举报
回复
对于模板替换, str = str.Replace("$title", "这是个测试标题"); //模板页中的ShowArticle
str = str.Replace("$content", "这是个测试内容!");
我如果是替换成从页面读取的内容怎么办?
zhangliangwangwen 2010-11-19
  • 打赏
  • 举报
回复
fghfghfghf
zhangliangwangwen 2010-11-19
  • 打赏
  • 举报
回复
fghfhghf
zhangliangwangwen 2010-11-19
  • 打赏
  • 举报
回复
fgygjghh
jevinss 2010-11-10
  • 打赏
  • 举报
回复
我问一下一个入门的问题,URLRewriter.dll这个在2008里面自带有吗?没有的话在哪里得到?
yun_88416425 2010-11-06
  • 打赏
  • 举报
回复
如果用HTML+AJAX+C#来做静态化的话,个人觉得不利于收索引擎的收入,而且ie对js的加载也不是很好,个人觉得静态化用在首页后资讯内容上做,其它的可以用伪静态来,收索引擎对静态页面的收入是比较友好的,相当动态页面来讲。
ASP.net静态化
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地址,解决办法如下



代码
1 using System;
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 class WebForm1:page
改写为
public class WebForm1:URL.OLPage

这样就解决回发问题。
编译*.dll方法:/t:library name.cs





2.静态化(模板替换)



templet.htm文件



<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>无标题页</title>
</head>
<body>
标题:$title<br/>
内容:$content
</body>
</html>







模板替换处理的简单方法(可自行拓展)



代码
public static string WriteFileMethod()
{
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 "";
}
t19608325 2010-09-24
  • 打赏
  • 举报
回复
ding
shellwin 2010-07-31
  • 打赏
  • 举报
回复
http://blog.csdn.net/shellwin/archive/2010/07/19/5746450.aspx
博文中有讲,主要说的是url伪静态,如果真要做成静态的话可以进行html静态页代码的替换生成对应的html静态页面,但是这种方式之前在做站用的时候管理(编辑)的时候比较麻烦。
随风落梦 2010-01-25
  • 打赏
  • 举报
回复
我也正在研究,没研究出来
yinguijian 2010-01-25
  • 打赏
  • 举报
回复
顶,我也正在研究这个呢
cygmacel 2009-10-29
  • 打赏
  • 举报
回复
ISAPI 这个在IDC公司在IIS里去把这东西加上的,不然是不行的
c254009604 2009-09-14
  • 打赏
  • 举报
回复
学习了。帮顶@
lvsihan0327 2009-04-26
  • 打赏
  • 举报
回复
up!!!!!!!!!!
chzpro 2009-04-26
  • 打赏
  • 举报
回复
extjs +asp.net mvc
表示层用extjs,后台代码c#,java 都可.
dys_198102 2009-04-26
  • 打赏
  • 举报
回复
问题解决,用的是79楼的方法,我感觉这个问题不在于技术,而是思路,思路正确了,就好办多了,原来那个静态链接是输入到数据库中的,用的时候提出来就行了
dengyun_1223 2009-04-26
  • 打赏
  • 举报
回复
学习
boy1234648 2009-04-26
  • 打赏
  • 举报
回复
无用过!
一方晴空 2009-04-26
  • 打赏
  • 举报
回复
http://baike.baidu.com/view/31870.htm 这是关于SHTML的一点说明,可以参考看下的
一方晴空 2009-04-26
  • 打赏
  • 举报
回复
一般都会有一个大致的模板,好像很有些人用SHTML,然后用流把里面动态的内容替换掉:
例如:

//城市
if (!string.IsNullOrEmpty(cityName))
{
BaseInfoStr += "<ul><li class='li_more'>城    市:</li><li class='li_moreRight'>"
+ cityName
+ "</li></ul>";
}
else
{
BaseInfoStr += "<ul><li class='li_more'>城    市:</li><li class='li_moreRight'>暂无</li></ul>";
}
基本的思想应该是这样的,
加载更多回复(85)

62,243

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧