为了更好地组织我的ASP.Net项目,我将所有.aspx文件放在一个名为WebPages的文件夹中。
我想找到一种方法来屏蔽我的所有网址中的'WebPages'文件夹。例如,我不想使用以下URL:
http://localhost:7896/WebPages/index.aspx
http://localhost:7896/WebPages/Admin/security.aspx
但相反,我希望我的所有网址如下('WebPages'是我用于构建我的工作的物理文件夹,但不应该对外界可见:)
http://localhost:7896/index.aspx
http://localhost:7896/admin/security.aspx
我能够通过为我的项目中的每个页面指定路由条目(并且它可以工作)来提出我自己的解决方案,但是这无法继续维护,我需要另一种方法。
public class Global : HttpApplication
{
protected void Application_Start(object sender, EventArgs e)
{
RegisterRoutes(RouteTable.Routes);
}
public static void RegisterRoutes(RouteCollection routes)
{
routes.MapPageRoute("", "index.aspx", "~/WebPages/index.aspx");
routes.MapPageRoute("", "admin/security.aspx", "~/WebPages/Admin/security.aspx");
}
}
也许我所追求的是一个能够捕获所有请求的类,只需添加我的'WebPages'物理目录?
答案 0 :(得分:0)
使用http://www.iis.net/download/urlrewrite而不是
你可以在web.config中使用它:
<rewrite>
<rules>
<rule name="Rewrite to Webpages folder">
<match url="(.*)" />
<action type="Rewrite" url="/WebPages/{R:1}" />
</rule>
</rules>
</rewrite>
答案 1 :(得分:0)
我终于推出了以下适用于我的情况的解决方案:
在我的Global.asax文件中,我有以下代码:
public class Global : HttpApplication
{
protected void Application_BeginRequest(object sender, EventArgs e)
{
if (Request.Path.EndsWith(".aspx"))
{
FixUrlsForPages(Context, Request.RawUrl);
}
}
private void FixUrlsForPages(HttpContext context, string url)
{
context.RewritePath("/WebPages" + url);
}
}
它几乎正在做Tudor所建议的但是在代码而不是web.config(我无法工作)。