.NET网站如何隐藏其文件的.aspx扩展名?

z-b*_*oss 29 asp.net

我很确定stackoverflow.com是用ASP.NET创建的,但无论我在哪里点击,我都看不到地址栏中的.aspx扩展名.它是如何完成的,有什么特别的原因吗?

小智 25

在stackoverflow的情况下,它们使用ASP.NET MVC而不是ASP.NET Web表单.对于Web表单,url指向磁盘上的文件,而MVC指向控制器操作.如果您使用的是webforms,则需要使用URL重写.Scott Guthrie有一篇关于URL重写的好文章.

  • 这是一个实现细节,没有特别的理由暴露给公共接口; 网址更漂亮,更容易通过电话网络读取,没有它,或'cgi',或'.php',或... (8认同)

Cra*_*aig 16

此站点使用ASP.NET MVC框架和Urls映射来路由而不是物理页面.路径将传递给控制器​​,然后控制器决定如何显示页面.


Eoi*_*ell 9

最有可能的是它通过URL重写完成...

网络服务器正在使用浏览器地址栏中的URL,并将其重新发布到幕后的ASPX页面

这可以在.NET HTTP模块中完成,也可以在IIS中作为ISAPI Handler完成

Scott Gutherie在他的网站上有一篇关于URL重写的好文章

http://weblogs.asp.net/scottgu/archive/2007/02/26/tip-trick-url-rewriting-with-asp-net.aspx


Mus*_*yed 7

您可以通过修改web.config文件来实现。

<configuration>
<system.webserver>
<rewrite>
   <rules>
            <rule name="RemoveASPX" enabled="true" stopProcessing="true">
                <match url="(.*)\.aspx" />
                <action type="Redirect" url="{R:1}" />
            </rule>
            <rule name="AddASPX" enabled="true">
                <match url=".*" negate="false" />
                <conditions>
                    <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
                    <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
                    <add input="{URL}" pattern="(.*)\.(.*)" negate="true" />
                </conditions>
                <action type="Rewrite" url="{R:0}.aspx" />
            </rule>
   </rules>
</rewrite>
</system.webserver>
</configuration>
Run Code Online (Sandbox Code Playgroud)