【发布时间】:2010-11-10 18:58:09
【问题描述】:
我注意到 stackoverflow.com 的页面上没有文件扩展名。我将如何使用 aspx 网站做到这一点?
【问题讨论】:
我注意到 stackoverflow.com 的页面上没有文件扩展名。我将如何使用 aspx 网站做到这一点?
【问题讨论】:
这些 URL 实际上并不指向文件。他们使用 URL 重写规则将 URL 转换为数据库查询并将输出反馈到指定页面(其 URL 未显示)。
编辑:澄清 SO 使用 MVC,因此 url 指向特定的控制器操作(带或不带参数,取决于页面)。动作运行一些代码来抓取数据或其他东西并将其传递给相应的视图,该视图基本上是一个 html 模板,用于填充动作提供的信息并呈现页面。
【讨论】:
他们使用 MVC
【讨论】:
这是 Scott Guthrie 的一篇精彩文章:
http://weblogs.asp.net/scottgu/archive/2007/02/26/tip-trick-url-rewriting-with-asp-net.aspx
涵盖所有场景:IIS 6、IIS7、使用第三方 URL 重写工具等。
【讨论】:
Stack Overflow 使用 ASP.NET MVC,它可以清理开箱即用的 URL。
基本上,您需要的是获取干净的 URL,然后将其映射到标准的 .NET URL,并传入额外的“目录”作为参数。例如将 /blog/post-no-one 重写为 /blog.aspx?id=post-no-one。
新的 IIS 有一个重写插件,如果你想用传统的 ASP.NET 来做这件事:
或者您可以通过覆盖 HttpModule 并在其中进行重写来创建自己的。这是一个复杂的例子:
【讨论】:
正如一些人所提到的,SO 正在使用 MVC 中包含的 URL 路由引擎。他们实际上已经通过 CodePlex 提供了代码,因此您可以在基于 Web 表单的 ASP.NET 站点中使用它。
Phil Haack 对如何做到这一点做了一个很好的总结:
它包括有助于您入门的示例、链接等。
【讨论】:
如果您仍然想使用 ASP.Net 而不使用 MVC 路由(MVC 很棒,顺便说一句),您可以使用 HTTP 处理程序路由请求。
http://msdn.microsoft.com/en-us/library/ms227675(v=vs.100).aspx
【讨论】: