ASP.NET友好的URL

3
在我的研究中,我发现有两种方法来完成它们。这两种方法都需要修改Global.Asax中的Application_BeginRequest过程,在其中运行代码以执行实际的URL映射(我的方法是使用包含所有友好URL及其映射“真实”URL的数据库视图)。现在的关键是让您的请求通过.NET引擎运行而不需要aspx扩展名。我发现的两种方法如下:
1.通过通配符应用程序扩展映射将所有内容都通过.NET引擎运行。 2.创建自定义aspx错误页面,并告诉IIS将404发送到该页面。
现在我的问题是:这两种方法中是否有一种比另一种更好?当我在开发服务器上进行测试时,我注意到第1种方法会破坏前台扩展,但这并不是什么大问题,因为我习惯于连接到我的站点。我对第1种方法的另一个问题是,即使我的托管公司对我很宽容(因为我是他们最大的客户),并且会考虑做这样的事情,他们仍然担心可能会出现的任何安全风险。第2种方法非常有效,但我只是觉得它不如第1种方法高效。我是错了吗?谢谢。
4个回答

3
我以前也使用过#2。
它更有效率,因为与通配符映射不同,ASP.NET引擎不需要“处理”所有其他资源(如图像文件、静态HTML、CSS、Javascript等)的请求。
或者,如果您不介意在URL中使用.aspx扩展名,您可以使用:http://myweb/app/idx.aspx/products/1 - 这也可以正常工作。
话虽如此,真正的解决方案是使用IIS 7,其中ASP.NET运行时是IIS HTTP模块堆栈的一个完全成熟的部分。

谢谢,这很有道理,不需要让所有其他资源文件都通过引擎运行。我最初在我的URL中使用了aspx扩展名,但想要将它们清除掉。我的站点在IIS 6上,但我也会更深入地了解IIS 7的东西。 - Nick Spiers

2
如果您拥有最新版本的IIS,则可以使用重写模块 - 请参见此处。如果没有,您可以使用免费的第三方二进制文件与旧版IIS(即版本6)一起使用 - 我曾经使用过一个可以从.ini文件中读取重写规则并支持正则表达式的工具,但我不记得它的名称了(可能是这个)。我建议您使用这种方法而不是仅使用404页面。

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

1

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

你在从数据库中进行映射方面是正确的。像MVC中默认使用的RegEx重写一样。这是因为它或多或少地强制你将主键放在URL中,并且没有很好的方法来映射URL中不允许的字符,比如'。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接