如何在ASP.NET中实现动态页面文件名?

时间:2009-01-20 18:38:23

标签: asp.net dynamic filenames

我希望我的网站能够为动态内容创建搜索引擎优化的链接(而不是通过查询字符串定位数据)。所以:

mysite/SomeModifiableNname.aspx
代替

mysite/DynamicContent.aspx?entryID=2345

除了重定向请求的智能404处理程序或IIS中的自定义mime类型处理程序之外,在ASP.NET中是否有一个很好的解决方案?
请记住,必须能够在运行时更改页面文件名。

4 个答案:

答案 0 :(得分:3)

您可以使用 HttpHandler ,如here所示。

答案 1 :(得分:2)

这是一个广泛的主题,通常称为URL重写......

有几种方法可以实现这一目标。我建议查看IIS重写模块。

您可能还应该调查为MVC开发的URL路由功能,并在ASP.NET 3.51中提供

更新:我希望我更了解你的意图。最后一句让我困惑。

答案 2 :(得分:0)

我过去用UrlRewrite.Net做过这个。在IIS7中还有一个内置的工具

答案 3 :(得分:0)

感谢大家的想法。根据提供的信息,我发现了我认为我需要的解决方案:

在Global.asax(或通过HttpModule)中,监听BeginRequest事件并在那里应用Context.Rewrite路径:

void Application_BeginRequest(object sender, EventArgs e)
{
    string fullOrigionalpath = Request.Url.ToString();

    if (fullOrigionalpath.ToLower().Contains("/Games".ToLower()))
    {
        Context.RewritePath("Default.aspx?id=Games");
    }

}

然后,在处理这些请求的页面的OnPreInit方法中,需要再次应用重写路径,以便PostBacks能够正常工作:

protected override void OnPreInit(EventArgs e)
{
    base.OnPreInit(e);

    if (Request.QueryString["id"] == null)
        return;
    if (Request.QueryString["id"].ToLower().Equals("games"))
        Context.RewritePath("Games", "", "id=Games");
}

使我的工作比我遇到的许多URL重写模块更好的关键是路径可以是动态的。也就是说,创建的URL可以是数据驱动的。