【问题标题】:Querystring without argument name没有参数名称的查询字符串
【发布时间】:2012-09-30 06:23:49
【问题描述】:
我正在努力让它发挥作用。我有一个 DNN 模块,我从查询字符串中读取并执行几个步骤。所有这些工作正常。现在我正在尝试在读取查询字符串时清理 URL
现在,URL 看起来像这样:
http://mysite.website.com/?pid=1234
我希望它看起来像:
http://mysite.website.com/1234
这样的事情可能吗?
【问题讨论】:
标签:
c#
asp.net
query-string
dotnetnuke
dotnetnuke-module
【解决方案3】:
你有几个选择:
- 探索 DNN 中可用的重写功能以及如何使用它们。它们可以在主机设置 > 高级设置 > 友好 URL 设置中找到。或者根据您正在使用的 IIS 版本使用第二个选项。
2a。 IIS 7 及更高版本的 URL 重写模块
2b。 HeliconTech 的“ISAPI_Rewrite 3”(也有免费版本,做得很好)
【解决方案4】:
您可以通过使用 HttpModule 来完成您正在寻找的事情,而无需与 DNN 进行交互。有点像这样:
public class PidRewriteModule : System.Web.IHttpModule
{
public void Dispose()
{
}
public void Init(System.Web.HttpApplication context)
{
context.BeginRequest += new EventHandler(context_BeginRequest);
}
void context_BeginRequest(object sender, EventArgs e)
{
HttpApplication app = sender as HttpApplication;
if (app != null)
{
Match mPidCheck = new Regex(@"^/(?<pid>[0-9]+)/?$").Match(app.Context.Request.Url.AbsolutePath);
if (mPidCheck.Success)
{
app.Context.RewritePath("~/default.aspx", String.Empty, String.Concat("pid=", mPidCheck.Groups["pid"].Value));
}
}
else
return;
}
}
然后您可以将其添加到您的 Web.config:
<modules runAllManagedModulesForAllRequests="true">
<add name="PidRewriteModule" type="Assembly.Namespace.PidRewriteModule, Assembly"/>
</modules>
把它放在 system.webServer 节点中。分别替换 Assembly 和 Namespace。
所有这些信息都是针对 IIS7 的。 IIS 6 并没有完全不同,但之前的实现必须走 ISAPI 过滤器的路线。