【发布时间】:2010-11-19 11:13:40
【问题描述】:
我正在构建一个广泛使用 URL 编码的网络商店。
我的数据库中有一个部门和类别列表,用于生成链接。当然,这些是在发送之前对 URL 进行编码的。
一些典型的链接是...
/MySite/Store/Countertop+Equipment/Can+Openers.aspx
/MySite/Store/Dinnerware.aspx时间>
/MySite/Store/Kitchen/Pastry%2f+Decorating.aspx
在我的 HTTPHandler 中,我调用 app.Request.Path 来获取当前路径。此调用返回的字符串不再是 URL 编码的,这使我无法正确解析。
一旦 URL 编码丢失
/MySite/Store/Kitchen/Pastry%2f+Decorating.aspx 变为
/MySite/Store/Kitchen/Pastry/Decorating.aspx。
这显然破坏了将 URL 转换为 QueryString 的方法。
有人知道如何解决这个问题吗?
这是我的 HTTPHandler 的核心
public void Init(System.Web.HttpApplication app)
{
app.BeginRequest += new EventHandler(Application_BeginRequest);
}
private void Application_BeginRequest(object sender, EventArgs e)
{
System.Web.HttpApplication app = (System.Web.HttpApplication)sender;
string realUrl = GetRealUrl(app.Request.Path);
if (!String.IsNullOrEmpty(realUrl))
app.Context.RewritePath(realUrl, false);
}
非常感谢您的帮助!
【问题讨论】:
-
Request 上的任何方法或属性都不能满足我的需要...看来解码可能发生在 IIS 级别之前,.net 甚至可以处理请求。我有另一个帖子,其中“~”没有使用编码 / 字符呈现正确的路径,这似乎证实了这一点。 Grr .. 如果服务器在到达应用程序之前就直接使用我的 URL,我不明白 URLEncoding 的意义何在。
标签: asp.net url-rewriting url-encoding