时间:2021-05-25
这篇文章描述了一个完整的 ASP.NET 2.0 URL 重写方案。这个方案使用正则表达式来定义重写规则并解决通过虚拟 URLs访问页面产生回发事件的一些可能的困难。
将 URL 重写方法应用到你的 ASP.Net 应用程序的两个主要原因是:可用性和可维护性。
谁都知道,相对于难于辨认的带参数的长的查询路径,用户更喜欢一些短的、简洁的 URL。任何时候,一个容易记住和敲入的路径比添加到收藏夹更有用。其次,当一个浏览器的收藏夹不可用时,记住的地址总比在搜索引擎中输入关键字进行搜索,然后再查找要强的多。比较下面的两个地址:
(1)
http:///Blog.aspx. 这个并不是我们需要的。所以,需要加一段代码来处理这些不希望的结果。
首先,我们要在HttpModule 注册和实现一个另外的方法:
public void Init(HttpApplication context)
{
// it is necessary to
context.BeginRequest += new EventHandler(
RewriteModule_BeginRequest);
context.PreRequestHandlerExecute += new EventHandler(
RewriteModule_PreRequestHandlerExecute);
}
void RewriteModule_PreRequestHandlerExecute(object sender, EventArgs e)
{
HttpApplication app = (HttpApplication)sender;
if ((app.Context.CurrentHandler is Page) &&
app.Context.CurrentHandler != null)
{
Page pg = (Page)app.Context.CurrentHandler;
pg.PreInit += new EventHandler(Page_PreInit);
}
}
这个方法检查用户是否请求了一个正常的ASP.NET页,然后为该页的PreInit 事件增加处理过程。这儿 RewriteContext 将处理实际参数,然后二次重写URL。二次重写是必需的,以使 ASP.NET 能够在它的表单的action属性中使用一个虚拟路径。
void Page_PreInit(object sender, EventArgs e)
{
// restore internal path to original
// this is required to handle postbacks
if (HttpContext.Current.Items.Contains("OriginalUrl"))
{
string path = (string)HttpContext.Current.Items["OriginalUrl"];
// save query string parameters to context
RewriteContext con = new RewriteContext(
HttpContext.Current.Request.QueryString, path);
HttpContext.Current.Items["RewriteContextInfo"] = con;
if (path.IndexOf("?") == -1)
path += "?";
HttpContext.Current.RewritePath(path);
}
}
最后,我们来看一下在我们的重写模块程序集中的三个类:
要使用重写模块,需要在配置文件中的 httpModules 节注册重写模块,如下:
<httpModules>
<add name="RewriteModule" type="RewriteModule.RewriteModule, RewriteModule"/>
</httpModules>
在使用重写模块时,需要注意:
要使用带扩展的重写模块代替.aspx (如 .html or .xml),必须配置 IIS ,以使这些扩展映射到 ASP.NET引擎 (ASP.NET ISAPI 扩展)。要进行这些设置,需要以管理员身份登录。
打开IIS管理控制台,并选择你要配置的站点的虚拟路径:
Windows XP (IIS 5)
Virtual Directory "RW"
Windows 2003 Server (IIS 6)
Default Web Site
然后在虚拟路径标签上点击Configuration…按钮 (或如果要使用整个站点都做映射就选择主目录标签)。
Windows XP (IIS 5)
Windows 2003 Server (IIS 6)
接下来,点击添加按钮,并输入一个扩展,你还需要指定一个 ASP.NET ISAPI扩展,注意去掉选项的对勾以检查文件是否存在。
如果你要把所有的扩展都映射到ASP.NET,对Windows XP上的IIS 5来说只需要设置 .*到 ASP.NET ISAPI,但对 IIS 6就不一样了,点击“添加”然后指定 ASP.NET ISAPI 扩展。
现在,我们已经创建了一个简单的但非常强大的 ASP.NET 重写模块,它支持可基于正则表达式的 URLs和页面回发,这个解决方案是容易实现的,并且提供给用户的例子也是可用的,它可以用简短的、整洁的URL来替代查询字符串参数。 要使用这个模块,只需简单在你的应用程序中对 RewriteModule进行引用,然后在 web.config文件中添加几行代码以使你不想显示的 URL通过正则表达式代替。这个重写模块是很容易部署的,因为只需要在web.config中修改任何“虚拟”的URL即可,如果你需要进行测试,还可以对重写模块进行关闭。
要想对重写模块有一个深入的了解,你可以查看本文提供的原代码。我相信你会发现这是一个比ASP.NET提供的原始映射更好的体验。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
在asp.net里实现URL重写(URLRewriter)的一个最简单的方法。参考了(作者ScottMitchell翻译:Janssen)的大作,虽然没有完全看
错误发生的原因是当ASP.NET检测到Web站点配置为使用ASP.NET4.0,本地ASP.NET4.0的组件会传递一个不能扩展的URL到ASP.NET的管理程
1.1.概要如何使用微软提供的Asp.Net来对动态产生的URL地址进行网址重写。网址重写是实现一种截取网址请求并将其进行处理后重新指向到一个指定的网址的过程。
URL的获取很简单,ASP.NET通用: 【1】获取完整url(协议名+域名+虚拟目录名+文件名+参数) stringurl=Request.Url.T
这种方法在《技巧/诀窍:在ASP.NET中重写URL》这篇文章提到的。简单的说,大家都知道:复制代码代码如下:https://www.jb51.net/prod