我知道如何将 URL 重写为
web.conf
但问题是我必须从 URL 中给出的 id 知道将哪个名称放入重写的 URL 中。例如 foo/5 应该是 foo/bar 因为在数据库中 id 5 的名称为“bar”。
我还有类方法告诉我哪个名称分配给哪个 id。
所以,我想从web.config中调用该类来获取相应id的确切名称,然后重写URL 我看到了使用
custom configuration class
的可能性,但不知道如何使用它。
您能告诉我如何做或给我另一项建议吗?
总体概念是我获取传入的 url(请求)并将其映射到特定页面。就像
/blog/my-awesome-post
将被重写为Blog.aspx?id=5
。
public class UrlRewriteModule : IHttpModule
{
public void Dispose()
{
// perform cleanup here if needed.
}
public void Init(HttpApplication context)
{
context.BeginRequest += new EventHandler(context_BeginRequest); // attach event handler for BeginRequest event.
}
void context_BeginRequest(object sender, EventArgs e)
{
// get the current context.
HttpContext context = ((HttpApplication)sender).Context;
// the requested url
string requestedUrl = context.Request.Path; // e.g. /blog/my-awesome-post
// if you want to check for addtional parameters from querystring.
NameValueCollection queryString = context.Request.QueryString;
// perform db calls, lookups etc to determine how to rewrite the requested url.
// find out what page to map the url to.
// lets say that you have a page called Blog, and 'my-awesome-post' is the title of blog post with id 5.
string rewriteUrl = "Blog.aspx?id=5";
// rewrite to the path you like.
context.RewritePath(rewriteUrl);
}
}
您需要将模块添加到 web.config 中的模块列表中:
IIS 7 之前版本:
<system.web>
<httpModules>
<add name="UrlRewriteModule" type="Assembly.Name.UrlRewriteModule, Your.Namespace.Here" />
....
</httpModules>
.....
</system.web>
IIS 7 及更高版本:
<system.webServer>
<modules>
<add name="UrlRewriteModule" type="Assembly.Name.UrlRewriteModule, Your.Namespace.Here" />
....
</modules>
....
</system.webServer>