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

私は最終的に、私の状況に適した次の解決策を進めました。

私の 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);
    }
}

チューダーが提案したことをほとんど実行していますが、web.configの代わりにコードで実行しています(これは機能しませんでした)。

于 2011-05-04T02:40:20.670 に答える
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 に答える