我希望我的网站为动态内容创建搜索引擎优化的链接(而不是通过查询字符串定位数据)。所以:
mysite/SomeModifiableNname.aspx代替
mysite/DynamicContent.aspx?entryID=2345.
除了重定向请求的智能 404 处理程序或 IIS 中的自定义 mime 类型处理程序之外,在 ASP.NET 中是否有一个很好的解决方案?
请记住,页面文件名必须能够在运行时更改。
您可以使用HttpHandler,如此处所示。
这是一个广泛的主题,通常称为 URL 重写......
有几种方法可以做到这一点。我建议查看 IIS 重写模块。
您可能还应该调查为 MVC 开发并在 ASP.NET 3.51 中可用的 URL 路由功能
更新:我希望我能更多地了解你的意图。最后一句话让我很困惑。
我过去用 UrlRewrite.Net 做过这个。在 IIS7 中也有一个内置的工具
感谢大家的想法。根据提供的信息,我发现了我认为需要的解决方案:
在 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 可以是数据驱动的。