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

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

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

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

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

现在这是我的问题:

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

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

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

谢谢

【问题讨论】:

    标签: asp.net iis url-rewriting url-routing friendly-url


    【解决方案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 页面来降低成本。

        【讨论】:

          猜你喜欢
          • 2010-09-07
          • 2013-02-14
          • 2020-05-01
          • 1970-01-01
          • 2012-09-16
          • 2013-03-02
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多