2

为了更好地组织我的 ASP.Net 项目,我将所有 .aspx 文件放在一个名为 WebPages 的文件夹中。

我想找到一种方法从我的所有 URL 中屏蔽“WebPages”文件夹。例如,我不想使用以下 URL:

http://localhost:7896/WebPages/index.aspx
http://localhost:7896/WebPages/Admin/security.aspx

但相反,我希望我的所有 URL 如下所示(“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”物理目录?

4

2 回答 2

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>
于 2011-05-02T23:28:18.853 回答
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(我无法工作)。

于 2011-05-04T02:40:20.670 回答