- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章ASP.NET实现伪静态网页方法小结由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
本文实例总结了ASP.NET实现伪静态网页方法,分享给大家供大家参考之用。具体方法如下:
方法一:利用Httphandler实现URL重写(伪URL及伪静态) 。
我们有时候会见到这样的地址:“http://www.XXXX.com/show-12-34.html”,你或许认为在站点服务器根目录“/”下存在名为“show-12-34.html”的文件,其实实际它可能是不存在的,而可能你看到的内容是“/aspx/show.aspx?type= 12&id=34”的内容,为什么要这样做呢?原因有多个方面:首先是增强URL的友好性,记“show-12-34.html”总比 “/aspx/show.aspx?type=12&id=34”好记吧?其次就是方便搜索引擎收录,很多搜索引擎更看好静态HTML页,比如:百度;其次就是出于安全性的考虑,因为这样隐藏了参数“type”、“id”。是不是很有意思呢?
其实这是利用URL重写实现的,下面我就说一下在ASP.NET2.0下我所知道的最简单的实现方法:通过实现接口“IHttpHandler”来接管HTTP请求,Follow me.
1.在资源管理方案中添加一个类,类的代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
|
//类URLRewriter程序清单:
using
System;
using
System.Data;
using
System.Configuration;
using
System.Web;
using
System.Web.Security;
using
System.Web.UI;
using
System.Web.UI.WebControls;
using
System.Web.UI.WebControls.WebParts;
using
System.Web.UI.HtmlControls;
/// <summary>
/// UrlRewriter URL重写类
/// Author:yoyo
/// </summary>
public
class
UrlRewriter : IHttpHandler
//实现“IHttpHandler”接口
{
public
UrlRewriter()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
public
void
ProcessRequest(HttpContext Context)
{
try
{
//取得原始URL屏蔽掉参数
string
Url = Context.Request.RawUrl;
//建立正则表达式
System.Text.RegularExpressions.Regex Reg =
new
System.Text.RegularExpressions.Regex
(
@"/show-(\d+)-(\d+)\..+"
,System.Text.RegularExpressions.RegexOptions.IgnoreCase);
//用正则表达式进行匹配
System.Text.RegularExpressions.Match m = Reg.Match(Url,Url.LastIndexOf(
"/"
));
//从最后一个“/”开始匹配
if
(m.Success)
//匹配成功
{
String RealPath =
@"~/aspx/show.aspx?type="
+ m.Groups[1] +
"&id="
+ m.Groups[2];
//Context.Response.Write(RealPath);
//Context.RewritePath(RealPath);//(RewritePath 用在无 Cookie 会话状态中。)
Context.Server.Execute(RealPath);
}
else
{
Context.Response.Redirect(Context.Request.Url.ToString());
}
}
catch
{
Context.Response.Redirect(Context.Request.Url.ToString());
}
}
/// <summary>
/// 实现“IHttpHandler”接口所必须的成员
/// </summary>
/// <value></value>
/// Author:yoyo
public
bool
IsReusable
{
get
{
return
false
; }
}
}
|
2.在web.config文件还要添加以下设置项 。
在<system.web>节点下添加如下代码:
<httpHandlers> <add verb="*" path="*/show-?*-?*.aspx" type="UrlRewriter" /> </httpHandlers> 。
解释一下:
verb是指允许的动作“GET”、“POST”、“PUT”中的一种或几种,星号“*”表示全部允许; 。
path是指匹配路径,支持简单的通配符; 。
type是指绑定的类名以及包括命名空间(如果有的话); 。
对了,首先你要建立一个WEB窗体“show.aspx”在目录“aspx”下,因为这个文件就是实际接受请求并显示相关内容的页面.
OK!,编译,打开网站输入地址http://localhost:80/show-12-34.aspx 访问一下,检查看是不是显示的“/aspx/show.aspx?type=12&id=34”的内容呢?! 。
上面我是设置了匹配ASPX文件,因为IIS里.HTML扩展名默认是不归ASP.NET接管的,如果要接管HTML请求, 请将IIS的扩展名.HTML映射到“C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll”, 然后将上面的aspx改成html:
<httpHandlers> <add verb="*" path="*/show-?*-?*.html" type="UrlRewriter" /> </httpHandlers> 。
现在打开网站输入地址http://localhost:80/show-12-34.html 访问一下~! 。
方法二:地址重写、使用伪静态、页面回发处理 。
制作网站页面的时候,有时候为了用户的体验和搜索引擎的收录,很多网站经常使用伪静态地址重写,或者称为 URL地址重写的办法,来将诸如:MyEbook.aspx?ID=1,MyEbook.aspx?ID=2MyEbook.aspx?ID=3等带有参 数的动态页面伪装成为一个静态页面,比如,将以上的伪装成为My1.html,My2.html,My3.html等等诸如此类! 。
出发点是很好的,不仅有利于用户体验,也有利于收录,实在是一举两得! 。
好处已讲,现在来谈谈使用这种办法所存在的毛病,问题就在于,当你使用伪静态技术的页面有按钮,需要提交内容时,这个时候,一旦与服务器之间有回发动作, 那么,地址栏里面显示的网页地址就不再是伪装出来的My1.html,My2.html,My3.html等等拉,而是变为MyEbook.aspx? ID=1,MyEbook.aspx?ID=2MyEbook.aspx?ID=3等等洛,如此一来,会让不太懂网页制作的网友感到不安,他们会认为自己 在上一个骗子网站,认为自己提交的数据都被另外一个网站给偷走了,总之,给他们的感觉就是,这样的网站具有欺骗性质;很可能,以后他们再也不敢上你的网站 了!!!……… 。
下面本人就个人解决如上问题的心得体会做如下说明,希望能够帮助广大网友解决问题! 。
解决如上问题,有很多种办法,有使用Javascript禁止回发,有将页面的 。
改为等等多种方法,反正能改的地方,都有人使用过了,并且,这样的文章比较多,但是难以实现,就本人脾气而已,更喜欢直接了当的办法,尽量少改地方,免得日后出错麻烦; 。
第一步:打开你的网站下面,新建一个类,文件名称大体如此:MyActionlessform.cs 。
第二步:该类的代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
|
using
System;
using
System.IO;
using
System.Web;
using
System.Web.UI;
namespace
MyURL
{
public
class
MyOLPage : Page
{
public
MyOLPage()
{ }
protected
override
void
Render(HtmlTextWriter writer)
{
if
(writer
is
System.Web.UI.Html32TextWriter)
{
writer =
new
FormFixerHtml32TextWriter(writer.InnerWriter);
}
else
{
writer =
new
FormFixerHtmlTextWriter(writer.InnerWriter);
}
base
.Render(writer);
}
}
internal
class
FormFixerHtml32TextWriter : System.Web.UI.Html32TextWriter
{
private
string
_url;
// 伪装的URL
internal
FormFixerHtml32TextWriter(TextWriter writer)
:
base
(writer)
{
_url = HttpContext.Current.Request.RawUrl;
}
public
override
void
WriteAttribute(
string
name,
string
value,
bool
encode)
{
if
(_url !=
null
&&
string
.Compare(name,
"action"
,
true
) == 0)
{
value = _url;
}
base
.WriteAttribute(name, value, encode);
}
}
internal
class
FormFixerHtmlTextWriter : System.Web.UI.HtmlTextWriter
{
private
string
_url;
internal
FormFixerHtmlTextWriter(TextWriter writer)
:
base
(writer)
{
_url = HttpContext.Current.Request.RawUrl;
}
public
override
void
WriteAttribute(
string
name,
string
value,
bool
encode)
{
if
(_url !=
null
&&
string
.Compare(name,
"action"
,
true
) == 0)
{
value = _url;
}
base
.WriteAttribute(name, value, encode);
}
}
}
|
之后,将这个类文件编译成为MyActionlessform.dll文件,并在网站的项目中引用他, 。
第三步:打开具有回发操作的页面,将其中的:System.Web.UI.Page更改为: MyURL.MyOLPage,如此而已,一劳永逸了,以后不再担心回发暴露真实地址吓走网友拉! 。
至此,大功可成一半多一点,接下来问题又来了,什么问题呢,你运行一下你的网站,是不是出现如下错误呀! 。
CS0433: 类型“MyURL.MyOLPage”同时存在于“c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\ Temporary ASP.NET Files\schoolit\3266aab1\aca2fc74\App_Code.2-69spm5.dll”和“c:\WINDOWS\ Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\schoolit\3266aab1\aca2fc74\assembly\dl3\4d107fc6\00b753fe_ea19c801\ MyActionlessform.DLL”中 。
大体就是这样的错误了,针对这样的错误,有很多解决办法,有的地方说,删除临时使用的文件夹,删除某个命名 空间等等操作,俺都试过了,但是百试不得其果,后来俺就自己想想,出现这样的错误无非就是两个文件同时存在,但是又不能重复使用,解决办法那还不简单,停 用一个,只使用一个就行了嘛 。
上面的,我们不是建立了一个MyActionlessform.cs了吗,它存在App_Code这个文件夹里面,另外一个是 MyActionlessform.dll,两个文件内容完全一样,做好了,我们就不需要MyActionlessform.cs了,我们只需要 MyActionlessform.dll,那么,想方设法将前者弄走不就得了(本人建议将此文件排除项目,不提倡直接删除该文件,因为以后可能使用 到),本人做法是,在项目中直接排出MyActionlessform.cs文件,经过测试,大功至此已结束!!!! 。
方法三:利用Mircosoft URLRewriter.dll实现页面伪静态 。
昨天,转贴了一篇利用ISAPI筛选器来实现URL伪静态的文章,我按照文章上的内容做,可是没有做出来,目前看来,该方法没有使用Microsoft URLRewriter.dll这个方法好,至少我个人觉得,花了一个晚上的时间,终于研究出来了怎么利用这个dll文件来对asp.net页面实现静态 化了,其实很简单。 1、获得Mircosoft URLRewriter.dll: 获得Mircosoft URLRewriter.dll可以到http://www.microsoft.com/china/msdn/library/webservices/asp.net/URLRewriting.mspx?mfr=true 这里,选择[下载本文的源代码],下载完毕后,导入工程,我这里没有对该工程做任何修改,保留了原来的重写方式,然后直接在VS2005里面生成.dll文件就可以了。 2、使用该dll文件:
添加引用,搞定.
3、页面方面的设计,这里不在赘述了,我会放一个下载包,有兴趣的朋友下载来看看吧,代码写的比较乱.
4、web.config的配置 这部是非常关键的,也是静态化能否成功的关键.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
<?
xml
version
=
"1.0"
?>
<
configuration
>
<
configSections
>
<
section
name
=
"RewriterConfig"
type
=
"URLRewriter.Config.RewriterConfigSerializerSectionHandler, URLRewriter"
/>
</
configSections
>
<
RewriterConfig
>
<
Rules
>
<
RewriterRule
>
<
LookFor
>~/web/new/type/(.[0-9]*)\.html</
LookFor
>
<
SendTo
>~/web/new.aspx?id=$1</
SendTo
>
</
RewriterRule
>
<
RewriterRule
>
<
LookFor
>~/web/index.html</
LookFor
>
<
SendTo
>~/web/index.aspx</
SendTo
>
</
RewriterRule
>
</
Rules
>
</
RewriterConfig
>
<
system.web
>
<
httpHandlers
>
<
add
verb
=
"*"
path
=
"*.aspx"
type
=
"URLRewriter.RewriterFactoryHandler, URLRewriter"
/>
<
add
verb
=
"*"
path
=
"*.html"
type
=
"URLRewriter.RewriterFactoryHandler, URLRewriter"
/>
</
httpHandlers
>
<
compilation
debug
=
"true"
/></
system.web
>
</
configuration
>
|
这里简单介绍一下:
1
2
3
4
5
6
7
8
9
10
11
12
|
<
RewriterConfig
>
<
Rules
>
<
RewriterRule
>
<
LookFor
>要查找的模式</
LookFor
>
<
SendTo
>要用来替换模式的字符串</
SendTo
>
</
RewriterRule
>
<
RewriterRule
>
<
LookFor
>要查找的模式</
LookFor
>
<
SendTo
>要用来替换模式的字符串</
SendTo
>
</
RewriterRule
>
</
Rules
>
</
RewriterConfig
>
|
httpHandlers的设置主要是配合IIS将请求重新定义处理,这里也比较关键,如果不存在合理的httpHandlers,那么,访问肯定会失败的.
关于正则表达式,可以到百度里搜索:"常用正则表达式",会有很多.
五.配置IIS解析.html文件 。
右键点我的电脑-->管理-->展开'服务和应用程序'-->internet信息服务-->找到你共享的目录-->右键 点击属性 -->点击'配置'-->映射下面 -->找到.aspx的可执行文件路径 复制路径-->粘贴路径-->扩展名为".html"-->然后把检查文件是否存在的勾去掉这样就可以了,如果遇到“确定”按钮失效, 可以用键盘事件编辑路径即可解决.
本文实例代码点此本站下载.
相信本文所述对大家的asp.net程序设计有一定的借鉴价值.
最后此篇关于ASP.NET实现伪静态网页方法小结的文章就讲到这里了,如果你想了解更多关于ASP.NET实现伪静态网页方法小结的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
目录 前言 style-loader css-loader sass-loader postcss-loader babel-l
目录 1、简单动态字符串(SDS) 2、链表 3、字典 哈希表 哈希表节点 字典 4、跳跃表
JS运行三部曲 js运行代码共分三步 语法分析 预编译 解释执行 JavaScript代码在运行时,首先会进行语法分析,通篇检查代码是否存在低级错误,然后进行预编译,整理内
目录 +拼接方式 sprintf函数 Join函数 buffer.Builderbuffer.WriteString函数 buffer.B
下面整理下python有哪些方式可以读取数据文件。 1. python内置方法(read、readline、readlines) read() : 一次性读取整个文件内容。推荐使用re
背景 项目中的流程监控,有几种节点,需要监控每一个节点是否超时。按传统的做法,肯定是通过定时任务,去扫描然后判断,但是定时任务有缺点:1,数据量大会慢;2,时间不好控制,太短,怕一
目录 1. 提炼函数 2. 合并重复的条件片段 3. 把条件分支语句提炼成函数 4. 合理使用循环 5. 提前让函数退出代替嵌套条件分支
开始之前,pandas中dataframe删除对象可能存在几种情况 1、删除具体列 2、删除具体行 3、删除包含某些数值的行或者列 4、删除包含某些字符、文字的行或者列 本文就针对这四种情况探讨
setData setData 是小程序开发中使用最频繁的接口,也是最容易引发性能问题的接口。在介绍常见的错误用法前,先简单介绍一下 setData 背后的工作原理。 工作原理 小程序的视图层
下面是五种实现斐波那契数列的方法 循环 ? 1
一,分析代码运行时间 第1式,测算代码运行时间 平凡方法 快捷方法(jupyter环境) 第2式,测算代码多次运行平均时间 平凡方法 快捷方法(jupyter环境) 第
python之成为图像处理任务的最佳选择,是因为这一科学编程语言日益普及,并且其自身免费提供许多最先进的图像处理工具。本文主要介绍了一些简单易懂最常用的python图像处理库。 当今世界充满了各种
流式布局 采用流式布局会将元素按从左到右的顺序排列,如果一个元素在一行中放不下,那这个元素会另起一行依然按照从左到右的顺序排列 示例: 代码 public class Tes
@PropertySource 作用是:对自定义的properties文件加载 使用:@PropertySource(value={"classpath:people.properti
实现消息队列的两种方式 apache activemq官方实例发送消息 直接在apache官网http://activemq.apache.org/download-archives.html下
常用配置 以下配置能使用File -> New Projects Settings -> Settings for New Projects进行配置的尽量用这个配置,因为这个配置是作用
摘要: 开发者开发部署web应用时通常使用tomcat服务器,很多初学者只懂得在开发工具上配置,但离开了开发工具,自己手动配置部署,并让一个项目跑起来,你会了吗。小编也遇到过这样的困扰。网上查找的
1. 字符串的翻转 利用切片 ? 1
cookie和session在java web开发中扮演了十分重要的作用,本篇文章对其中的重要知识点做一些探究和总结。 1.cookie存在于浏览器 随意打开一个网址,用火狐的调试工具,随意选取
1、使用内置的tomcat,通过java -jar的方式启动 比如:java -jar bms.jar 但是这种启动方式 一旦关闭控制台 或者crtl+c 退出 此时应用就关闭了
我是一名优秀的程序员,十分优秀!