我正在使用 Visual Studios 的内置 ASP.NET 开发服务器 (VWD) 在开发过程中测试我的网站。
我希望这个 ASP.NET 网站使用无扩展名 URL(页面不需要 aspx 扩展名)。通常我会在 IIS 中配置一个指向 ASPX 页面的自定义 404。我将如何使用 VWD 做到这一点?
PS 这不是一个 ASP.NET MVC 网站。
我正在使用 Visual Studios 的内置 ASP.NET 开发服务器 (VWD) 在开发过程中测试我的网站。
我希望这个 ASP.NET 网站使用无扩展名 URL(页面不需要 aspx 扩展名)。通常我会在 IIS 中配置一个指向 ASPX 页面的自定义 404。我将如何使用 VWD 做到这一点?
PS 这不是一个 ASP.NET MVC 网站。
这是一个使用 UrlRewritingNet 的 Web.Config 示例。这样做将允许您进行无扩展重写,而无需编写任何 HttpModule 或类似的东西。
(全文在这里)
注意:这需要 IIS7,因为它使用 web.config 的 system.webServer 部分。
<configSections>
<section name="urlrewritingnet"
restartOnExternalChanges="true"
requirePermission="false"
type="UrlRewritingNet.Configuration.UrlRewriteSection, UrlRewritingNet.UrlRewriter" />
</configSections>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true">
<add name="UrlRewriteModule" type="UrlRewritingNet.Web.UrlRewriteModule, UrlRewritingNet.UrlRewriter" />
</modules>
</system.webServer>
<urlrewritingnet rewriteOnlyVirtualUrls="true"
contextItemsPrefix="QueryString"
xmlns="http://www.urlrewriting.net/schemas/config/2006/07">
<rewrites>
<!--Enable HTM(L) Extensions-->
<add name="pageHTML"
virtualUrl="^~/(.+).htm(.*)"
redirectMode="Permanent"
rewriteUrlParameter="ExcludeFromClientQueryString"
destinationUrl="~/$1.aspx"
ignoreCase="true" />
<!--Fix the WebResource JS Error-->
<add name="WebResourceFix"
virtualUrl="^~/WebResource.axd(.*)"
rewriteUrlParameter="IncludeQueryStringForRewrite"
destinationUrl="~/WebResource.axd$1"
ignoreCase="true"/>
<!--Fix the ScriptResource JS Error-->
<add name="ScriptResource"
virtualUrl="^~/ScriptResource.axd(.*)"
rewriteUrlParameter="IncludeQueryStringForRewrite"
destinationUrl="~/ScriptResource.axd$1"
ignoreCase="true"/>
<!--Allow Extensionless Page Extensions-->
<add name="pageExtensionless"
virtualUrl="^~/(.+)$"
redirectMode="Permanent"
rewriteUrlParameter="ExcludeFromClientQueryString"
destinationUrl="~/$1.aspx"
ignoreCase="true" />
</rewrites>
</urlrewritingnet>
您需要做的就是在 web.config 中的两个不同位置添加模块...
<system.web>
<pages theme="Default" />
<httpModules>
<add name="UrlRewriteModule" type="UrlRewritingNet.Web.UrlRewriteModule, UrlRewritingNet.UrlRewriter" />
</httpModules>
</system.web>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true">
<remove name="UrlRewriteModule"/>
<add name="UrlRewriteModule" type="UrlRewritingNet.Web.UrlRewriteModule, UrlRewritingNet.UrlRewriter" />
</modules>
</system.webServer>
第一个是将它添加到您的 httpModules 中,它将在您的 VS 开发环境中工作,第二个将用于 IIS7
你不需要做任何特别的事情。只需从 ASPX 页面文件中删除 .aspx 扩展名,它应该可以与 VWD 一起正常工作。Visual Studio 设计者可能会抱怨没有为扩展 '' 注册构建提供程序,但您可以忽略它。然后你可以引用没有扩展名的页面:
http://localhost:2181/Default
<%@ Page Language="C#"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
<div>
Hello World
</div>
</form>
</body>
</html>
如果您尝试获取类似http://localhost:3000/value的内容以访问http://localhost:3000/page.aspx?tag=value那么您可以使用 HttpModule,这也是一个很好的替代404重定向。我以前也做过同样的事情。
我在上一个问题中发布了一些示例代码。