ASP.NET 友好 URL

Posted

技术标签:

【中文标题】ASP.NET 友好 URL【英文标题】:ASP.NET Friendly URLs 【发布时间】:2010-12-17 10:27:51 【问题描述】:

在我的研究中,我发现了两种方法。

两者都需要对 Global.Asax 中的 Application_BeginRequest 过程进行修改,您将在其中运行代码来执行实际的 URL 映射(我的数据库视图包含所有友好 URL 及其映射的“真实”URL)。现在的诀窍是让您的请求在没有 aspx 扩展名的情况下通过 .NET 引擎运行。我发现的两种方法是:

    使用通配符应用程序扩展映射通过 .NET 引擎运行所有内容。

    创建自定义 aspx 错误页面并告诉 IIS 向其发送 404。

现在这是我的问题:

有什么理由比另一个更好吗?

在我的开发服务器上玩游戏时,我注意到#1 的第一件事是它拙劣的首页扩展,不是什么大不了的事,但这就是我习惯连接到我的网站的方式。我对 #1 的另一个问题是,即使我的托管公司对我很宽容(因为我是他们最大的客户)并且会考虑做这样的事情,但他们对它可能带来的任何安全风险保持警惕。

`#2 效果很好,但我只是觉得它不如 #1 高效。我只是在妄想吗?

谢谢

【问题讨论】:

【参考方案1】:

您是否检查过 ASP .Net MVC Framework?使用该框架,您的所有 URL 都会自动映射到可以执行任何所需操作的控制器(包括重定向到其他 URL 或控制器)。您还可以使用自定义参数设置自定义路由。如果您还没有看过它,也许它值得一看。

【讨论】:

【参考方案2】:

您必须通过 ASP.NET 引擎映射所有请求。 IIS 处理请求的方式是文件扩展名。默认情况下,它只处理仅由 ASP.NET 处理的 .aspx、.ashx 等扩展名。原因是它增加了请求处理的开销。 不久前,我写了如何使用 IIS 6,http://professionalaspnet.com/archive/2007/07/27/Configure-IIS-for-Wildcard-Extensions-in-ASP.NET.aspx。

您从数据库进行映射是正确的。 RegEx 重写,就像在 MVC 中开箱即用。这是因为它或多或少会迫使您将主键放在 URL 中,并且没有很好的方法来映射 URL 中不允许的字符,例如 '.

【讨论】:

【参考方案3】:

我过去也使用过#2。

它更高效,因为与通配符映射不同,ASP.NET 引擎不需要“处理”对所有其他资源(如图像文件、静态 html、CSS、javascript 等)的请求。

或者,如果您不介意 URL 中的 .aspx 扩展名,您可以使用:@987654321@ - 效果很好。

话虽如此,真正的解决方案是使用 IIS 7,其中 ASP.NET 运行时是 IIS HTTP 模块堆栈的成熟部分。

【讨论】:

谢谢,让所有其他资源文件不通过引擎运行是有道理的。我最初确实在我的 URL 中有 aspx 扩展名,但想清除它们。我的网站在 IIS 6 上,但我也会更多地研究 IIS 7。【参考方案4】:

如果您拥有最新版本的 IIS,则可以使用重写模块 - 请参阅 here。如果没有免费的第三方二进制文件,你可以使用旧的 IIS(即版本 6)——我使用了一个从 .ini 文件中读取重写规则并支持正则表达式的二进制文件,但我不记得它的名字了(它可能是 @987654322 @)。我会推荐这个而不是使用 404 页面来降低成本。

【讨论】:

以上是关于ASP.NET 友好 URL的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET 友好 URL 和 default.aspx

打印友好的 ASP.NET MVC 3 视图

在 ASP.NET 中使用带有友好 URL 的 Response.Redirect

如何在 ASP.NET 中将 base64 图像 URL 转换为用户友好 URL

ASP.NET MVC 中返回视图的 URL

在 ASP.NET 中实现 404 的最佳方法