在我的研究中,我发现了两种方法。
两者都需要修改Global.Asax中的Application_BeginRequest过程,您可以在其中运行代码来进行实际的URL映射(我的数据库视图包含所有友好URL及其映射的'真实'URL)。现在的诀窍是让你的请求在没有aspx扩展的情况下通过.NET引擎运行。我发现的两种方式是:
使用通配符应用程序扩展名映射在.NET引擎中运行所有内容。
创建一个自定义的aspx错误页面并告诉IIS向其发送404。
现在这是我的问题:
是否有任何理由比其他人更好?
在我的开发服务器上玩游戏时,我注意到#1的第一件事就是它更糟糕的首页扩展,不是很大的交易,但这就是我习惯连接到我的网站的方式。我对#1的另一个问题是,尽管我的托管公司对我很宽容(因为我是他们最大的客户)并且会考虑做这样的事情,但他们对可能出现的任何安全风险都持谨慎态度。
<#>`#2效果很好,但我觉得它不如#1效率高。我只是在妄想吗?由于
答案 0 :(得分:3)
我过去也使用过#2。
它更有效,因为与通配符映射不同,ASP.NET引擎不需要“处理”对所有其他资源的请求,如图像文件,静态HTML,CSS,Javascript等。
或者,如果你不介意你的URL中的.aspx扩展名,你可以使用:http://myweb/app/idx.aspx/products/1
- 这样可以正常工作。
话虽如此,真正的解决方案是使用IIS 7,其中ASP.NET运行时是IIS HTTP模块堆栈的完全成熟部分。
答案 1 :(得分:2)
如果您拥有最新版本的IIS,则可以使用重写模块 - 请参阅here。如果没有免费的第三方二进制文件,你可以使用较旧的IIS(即版本6) - 我使用了一个从.ini文件读取重写规则并支持正则表达式,但我不记得它的名字抱歉(它可能{{ 3}})。我推荐这个,而不是用404页面来预算它。
答案 2 :(得分:1)
你检查过ASP .Net MVC Framework了吗?使用该框架,您的所有URL都会自动映射到控制器,控制器可以执行任何所需的操作(包括重定向到其他URL或控制器)。您还可以使用自定义参数设置自定义路由。如果你还没有看到它,也许值得一看。
答案 3 :(得分:1)
您必须通过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中不允许的字符,例如'。