把aspx页面伪装成html

在 Global.asax 中添加 Application_BeginRequest 事件:
protected void Application_BeginRequest(object sender, EventArgs e)
{
    string pathAndQuery = Request.Url.PathAndQuery.ToLower();
    if (pathAndQuery.IndexOf(".html") > -1)
    {
        pathAndQuery = "~/" + pathAndQuery.Replace(".html"".aspx");
        HttpContext.Current.RewritePath(pathAndQuery);
    }
}
这样就可以在浏览器地址栏里用http://localhost/1234/xxx.html 来访问你的 http://localhost/1234/xxx.aspx页面了,浏览器地址栏显示的是http://localhost/1234/xxx.html (页面带参数也是可以的)。
标签: URL重写

posted on 2011-10-19 09:39 大豆男生 阅读(681) 评论(17) 编辑 收藏

评论

#1楼 2011-10-19 13:17 不入流程序员      

楼主威武  回复 引用 查看   

#2楼 2011-10-19 14:42 一涵      

是不是噢,晚上试试~~~  回复 引用 查看   

#3楼 2011-10-19 19:38 Lee_Goophy      

新手学习了(⊙o⊙)…  回复 引用 查看   

#4楼 2011-10-19 20:10 Lee_Goophy      

楼主,我刚才试了下好像没用,请问你那个替换写对了吗?还有后面替换的时候都是char,前面定义的却是string.

等。。
 回复 引用 查看   

#5楼 2011-10-19 20:39 丁宗银      

楼主,行不行啊,只要建立一个Global.asax,然后在里面写那个事件就可以了???就这一点代码,,,,你确定?????

请详细讲解下。。。。。。
 回复 引用 查看   

#6楼[楼主] 2011-10-19 22:25 大豆男生      

@Lee_Goophy
@丁宗银
单击web应用右键,选择 添加-》新建项,在“添加项”对话框中的左侧选择“Web”,右侧选择“全局应用程序类”,单击“添加”按钮来添加Global.asax,然后在Global.asax.cs 中 添加 Application_BeginRequest 事件(把上面的代码复制过去就可了)。最后,运行web应用,就可以用http://localhost:1234/WebForm1.html 来代替,http://localhost:1234/WebForm1.aspx 访问页面了。
 回复 引用 查看   

#7楼 2011-10-20 10:18 敢为天下鲜      

楼主,我试了下,.aspx不能直接转换成html啊  回复 引用 查看   

#8楼[楼主] 2011-10-20 10:55 大豆男生      

@敢为天下鲜
不是把aspx转成html, 只是可以在浏览器的地址栏里如入http://localhost:1234/WebForm1.html 来访问http://localhost:1234/WebForm1.aspx页面,虽然浏览器的地址栏显示的http://localhost:1234/WebForm1.html 但实际上访问的还是.aspx页面。只是个假象,并没有把aspx页面,转成静态的html页面。
 回复 引用 查看   

#9楼 2011-10-20 16:15 张韬      

lz,这个是可以的,可以详细讲下具体实现过程吗?  回复 引用 查看   

#10楼[楼主] 2011-10-20 17:02 大豆男生      

@张韬
1)对网站http://localhost/1234的每次请求,都会触发Global.asax 的 Application_BeginRequest事件。
2)在该事件中使用Request.Url.PathAndQuery获取请求的url信息,并判断是否为.html
3)如果是请求的是.html, 就通过HttpContext.Current.RewritePath,将请求Rewrite到对应的.aspx文件上,就相当于用户直接访问的.aspx页面一样。

用户感觉自己在访问.html页面,实际上在Application_BeginRequest事件中,自动Rewrite到.aspx页面上了,这样便达到了“aspx页面伪装成html”的效果。
 回复 引用 查看   

#11楼 2011-10-20 20:31 丁宗银      

lz不行哎,我得Global.asax是这样写得
<%@ Application Language="C#" %>

<script runat="server">

void Application_Start(object sender, EventArgs e)
{
//在应用程序启动时运行的代码

}

void Application_End(object sender, EventArgs e)
{
//在应用程序关闭时运行的代码

}

void Application_Error(object sender, EventArgs e)
{
//在出现未处理的错误时运行的代码

}

void Session_Start(object sender, EventArgs e)
{
//在新会话启动时运行的代码

}

void Session_End(object sender, EventArgs e)
{
//在会话结束时运行的代码。
// 注意: 只有在 Web.config 文件中的 sessionstate 模式设置为
// InProc 时,才会引发 Session_End 事件。如果会话模式
//设置为 StateServer 或 SQLServer,则不会引发该事件。

}
//下面是复制你的代码
protected void Application_BeginRequest(object sender, EventArgs e)
{
string pathAndQuery = Request.Url.PathAndQuery.ToLower();
if (pathAndQuery.IndexOf(".html") > -1)
{
pathAndQuery = "~/" + pathAndQuery.Replace(".html", ".aspx");
HttpContext.Current.RewritePath(pathAndQuery);
}
}

</script>
我重新生成后, 运行http://localhost:1607/test/Default.html
无法找到资源,运行http://localhost:1607/test/Default.aspx
是可以的!

求解!!!
 回复 引用 查看   

#12楼[楼主] 2011-10-20 21:54 大豆男生      

@丁宗银
应该是没有触发Application_BeginRequest事件。
我的Global.asax 和 Global.asax.cs是这样的,你参考一下:

Global.asax
<%@ Application Codebehind="Global.asax.cs" Inherits="TestApp1.Global" Language="C#" %>

Global.asax.cs
using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Web;
using System.Web.Security;
using System.Web.SessionState;
namespace TestApp1
{
public class Global : System.Web.HttpApplication
{
protected void Application_BeginRequest(object sender, EventArgs e)
{
string pathAndQuery = Request.Url.PathAndQuery.ToLower();
if (pathAndQuery.IndexOf(".html") > -1)
{
pathAndQuery = "~/" + pathAndQuery.Replace(".html", ".aspx");
HttpContext.Current.RewritePath(pathAndQuery);
}
}
}
}
 回复 引用 查看   

#13楼 2011-10-21 11:18 冲锋-_-!蜗牛      

LZ,这个好像不行吧,你只是Application_BeginRequest里面把请求的url做个判断,如果有.html就把.html替换成.aspx,那么url就变成
以.aspx做结尾的超链接,然后重定位这个后面的url,那就无法找到资源!
 回复 引用 查看   

#14楼 2011-10-21 22:16 丁宗银      

@大豆男生
Global.asax.cs是哪里来得???怎么我建立就一个Global.asax 这个,其他的什么都没有哎!
 回复 引用 查看   

#15楼[楼主] 2011-10-22 08:46 大豆男生      

@丁宗银
你用的是website吧,重新建立一个web application试试
 回复 引用 查看   

#16楼 2011-10-22 09:53 丁宗银      

<%@ Application Language="C#" %>

<script runat="server">

void Application_Start(object sender, EventArgs e)
{
// 在应用程序启动时运行的代码



}
protected void Application_BeginRequest(object sender, EventArgs e)
{
string pathAndQuery = Request.Url.PathAndQuery.ToLower();
if (pathAndQuery.IndexOf(".html") > -1)
{
pathAndQuery = pathAndQuery.Replace(".html", ".aspx");
HttpContext.Current.RewritePath(pathAndQuery);
}
}

void Application_End(object sender, EventArgs e)
{
// 在应用程序关闭时运行的代码

}

void Application_Error(object sender, EventArgs e)
{
// 在出现未处理的错误时运行的代码

}

void Session_Start(object sender, EventArgs e)
{
// 在新会话启动时运行的代码

}

void Session_End(object sender, EventArgs e)
{
// 在会话结束时运行的代码。
// 注意: 只有在 Web.config 文件中的 sessionstate 模式设置为 InProc 时,才会引发 Session_End 事件。
// 如果会话模式设置为 StateServer
// 或 SQLServer,则不会引发该事件。

}

</script>
这样就行了!谢谢LZ分享!
 回复 引用 查看   

#17楼 2011-12-02 15:20 jacksondesign      

可是有个问题,像aspnetpager这种分页控件就用不了  回复 引用 查看   

导航

公告


励志照亮人生,创业改变命运!

Blog 访问量,点击这里查看如何添加访问计数器。
昵称:大豆男生
园龄:6年
粉丝:20
关注:3
<2011年10月>
2526272829301
2345678
9101112131415
16171819202122
23242526272829
303112345

统计

搜索

 

常用链接

最新随笔

我的标签

随笔分类(166)

随笔档案(182)

我的连接

积分与排名

最新评论

阅读排行榜

评论排行榜

推荐排行榜