不错呦!smile@林凯西,确保“准备文件”中的几个文件都有安装,S...您好,看了您这篇帖子觉得很有帮助。但是有个问题想请...我的修改过了怎么还被恶意注册呢 @jjjjiiii 用PJ快9年了,主要是A...PJ3啊,貌似很少有人用PJ了,现在不是WP就是z...@332347365,我当时接入时错误码没有-10...楼主,ChkValue值应为-103是什么意思呢?...大哥 你最近能看到我发的信息,请跟我联系,我有个制...
ASP.NET借助URLRewriter实现URL重写
编辑:dnawo 日期:2008-09-11
使用URL重写可以实现用http://www.mzwu.com/d100.aspx类似的地址来访问http://www.mzwu.com/default.aspx?id=100,这样的好处非常多:一是隐藏了真实路径,提高应用程序的安全性;二是有利于搜索引擎收录;三是便于记忆。下边我们来看看在ASP.NET中怎么实现URL重写:
下载安装URLRewriter,添加引用URLRewriter.dll,在Web.config中配置:
OK,这样就实现了URL重写,运行测试就能看到结果了。不过,这样还存在一个问题:当页面中进行回调时,URL会变成真实的地址http://www.mzwu.com/default.aspx?id=100,所以我们得花点时间再来解决下这个问题。
先添加引用URLRewriter安装文件夹下的ActionlessForm.dll,然后在.aspx页面添加:
最后修改下form即可:
另一个解决思路是新建个类BasePage来专门处理这个问题,它继承自System.Web.UI.Page类,然后其他页面都改为继承自BasePage即可,BasePage类内容:
参考资料
[1].在 ASP.NET 中执行 URL 重写:http://msdn.microsoft.com/zh-cn/library/ms972974.aspx
下载安装URLRewriter,添加引用URLRewriter.dll,在Web.config中配置:
复制内容到剪贴板
程序代码

<configuration>
<configSections>
<section name="RewriterConfig" type="URLRewriter.Config.RewriterConfigSerializerSectionHandler, URLRewriter" />
</configSections>
<RewriterConfig>
<Rules>
<!-- 规则1 -->
<RewriterRule>
<LookFor>~/d(\d+)\.aspx</LookFor>
<SendTo>~/default.aspx?id=$1</SendTo>
</RewriterRule>
<!-- 规则2 -->
<RewriterRule>
<LookFor>~/k(\d+)\.aspx</LookFor>
<SendTo>~/default.aspx?key=$1</SendTo>
</RewriterRule>
</Rules>
</RewriterConfig>
<system.web>
<httpHandlers>
<add verb="*" path="*.aspx" type="URLRewriter.RewriterFactoryHandler, URLRewriter" />
</httpHandlers>
</system.web>
</configuration>
<configSections>
<section name="RewriterConfig" type="URLRewriter.Config.RewriterConfigSerializerSectionHandler, URLRewriter" />
</configSections>
<RewriterConfig>
<Rules>
<!-- 规则1 -->
<RewriterRule>
<LookFor>~/d(\d+)\.aspx</LookFor>
<SendTo>~/default.aspx?id=$1</SendTo>
</RewriterRule>
<!-- 规则2 -->
<RewriterRule>
<LookFor>~/k(\d+)\.aspx</LookFor>
<SendTo>~/default.aspx?key=$1</SendTo>
</RewriterRule>
</Rules>
</RewriterConfig>
<system.web>
<httpHandlers>
<add verb="*" path="*.aspx" type="URLRewriter.RewriterFactoryHandler, URLRewriter" />
</httpHandlers>
</system.web>
</configuration>
OK,这样就实现了URL重写,运行测试就能看到结果了。不过,这样还存在一个问题:当页面中进行回调时,URL会变成真实的地址http://www.mzwu.com/default.aspx?id=100,所以我们得花点时间再来解决下这个问题。
先添加引用URLRewriter安装文件夹下的ActionlessForm.dll,然后在.aspx页面添加:
复制内容到剪贴板
程序代码

<%@ Register TagPrefix="skm" Namespace="ActionlessForm" Assembly="ActionlessForm" %>
最后修改下form即可:
复制内容到剪贴板
程序代码

<skm:Form id="form1" runat="server">
<div>
</div>
</skm:Form>
<div>
</div>
</skm:Form>
另一个解决思路是新建个类BasePage来专门处理这个问题,它继承自System.Web.UI.Page类,然后其他页面都改为继承自BasePage即可,BasePage类内容:
复制内容到剪贴板
程序代码

using System;
using System.Web;
using System.Web.UI;
using System.IO;
/// <summary>
///BasePage 的摘要说明
/// </summary>
public class BasePage : Page
{
public BasePage()
{ }
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;
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);
}
}
using System.Web;
using System.Web.UI;
using System.IO;
/// <summary>
///BasePage 的摘要说明
/// </summary>
public class BasePage : Page
{
public BasePage()
{ }
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;
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);
}
}
参考资料
[1].在 ASP.NET 中执行 URL 重写:http://msdn.microsoft.com/zh-cn/library/ms972974.aspx






评论: 0 | 引用: 0 | 查看次数: 4098
发表评论
请登录后再发表评论!