2009-11-17 117 views
3

在我的研究中,我发现了两种方法来完成它们。ASP.NET友好网址

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

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

  2. 创建一个自定义aspx错误页面并告诉IIS发送404到它。

现在,这里是我的问题:

没有任何理由的其中一个比另一个好做?

在我的开发者服务器上玩耍时,我注意到关于#1的第一件事就是它的frontpage扩展混淆了,没有什么大不了的,但这就是我习惯连接到我的网站的方式。我与#1的另一个问题是,尽管我的托管公司对我(我是他们最大的客户)宽容,并且会考虑这样做,但他们对可能存在的任何安全风险保持警惕。

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

感谢

回答

3

我以前也用过#2。

这是更有效,因为不像通配符映射,ASP.NET引擎不需要像图像文件,静态HTML,CSS,Javascript代码等

另外,如果所有的额外资源,以“进程”请求你不介意。你可以使用URL中的.aspx扩展名:http://myweb/app/idx.aspx/products/1 - 工作正常。

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

+0

谢谢,这是没有所有其他资源文件通过引擎运行的意义。 我原本在我的网址中有aspx扩展名,但想清除它。 我的网站是在IIS 6上,但我会更多地关注IIS 7的东西。 – 2009-11-17 14:02:03

2

如果您有最新版本的IIS有重写模块 - 参看here。如果没有免费的第三方二进制文件,你可以使用旧的IIS(即版本6) - 我已经使用一个从.ini文件读取重写规则并支持正则表达式,但我不记得它的名称抱歉(它可能是this) 。我会推荐这与404页面便宜。

1

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

1

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

你是对的从数据库做你的映射。 RegEx重写,就像在MVC中使用的那样。这是因为它或多或少会迫使您将主键放在URL中,并且没有很好的方法来映射URL中不允许的字符,如'。