ホーム > .NET, ASP.NET 備忘録 > Routing:aspxファイルの隠蔽

Routing:aspxファイルの隠蔽

Routingを用いたプロジェクトでaspxファイルを直接指定した場合、標準では指定されたaspxファイルがそのまま表示されます。
たとえば下記の記事で書いたようなサンプルを作成してみます。

ちょっと先取り Routing 4:その1 PageRouteHandler

このとき、Default2.aspxはサイト直下に存在しています。

サンプルの構成

ここでデバッグ時に次のように直接Default2.aspxを指定してみましょう。

http://localhost:(port)/RoutingTest/Default2.aspx

Default2.aspxが表示されますが、この場合Routingが行われているわけではありません。
当然RouteDataも取り出せない、というかそもそも設定されていませんので、場合によってはエラーになることが十分に考えられます。
このようなことがないように、直接aspxファイルを表示させない方法を考えてみます。

参考になるのはDynamicDataプロジェクトです。
DynamicDataプロジェクトでは、DynamicDataフォルダ直下にweb.configがあります。

DynamicDataプロジェクトの構成

この中には以下のように記述されています。

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <system.web>
      <httpHandlers>
        <add path="*.aspx" verb="*" type="System.Web.HttpNotFoundHandler" validate="true"/>
      </httpHandlers>
    </system.web>
</configuration>

これは、aspxファイルが直接指定された場合、ファイルが存在していたとしてもファイルが見つからなかった、というエラーを返す設定になります。
DynamicDataプロジェクトでは、この設定を使うことでaspxファイルが直接指定されておかしなエラーが発生することを防いでいます。

これにならって最初に作ったサンプルを修正してみましょう。
サイトのルートの直下にRouteFileフォルダを作成し、Default2.aspxをRouteFileフォルダに移動します。
また、RouteFileフォルダにweb.configファイルを作成し、上記と同じくHttpNotFoundHandlerの設定を記述します。

サンプルの修正後の構成

それからGlobal.asaxファイルに記述されているRoutingの設定中のDefault2.aspxの位置を修正します。

RouteTable.Routes.Add("testRoute",
                      new Route("test/{id}",
                      new RouteValueDictionary(new { id = 1 }),
                                               new PageRouteHandler("~/RouteFile/Default2.aspx")));

このように修正すると、

http://localhost:(port)/RoutingTest/test/

のようにRoutingが利用される場合には正しく表示が行われますが

http://localhost:(port)/RoutingTest/RouteFile/Default2.aspx

このようにaspxファイルを直接指定した場合にはファイルが見つからないというエラーになります。

このHttpNotFoundHandlerの設定はRoutingの場合だけでなく、直接ファイルを指定したときにそれを見せないようにする必要があるときに便利に使える設定です。
実際にマシンレベルでのweb.configをみると、HttpNotFoundHandlerを使った設定がいくつも記述されています。
ここで使い方を覚えておくといいかもしれません。

カテゴリー:.NET, ASP.NET 備忘録
  1. まだコメントはありません。
  1. No trackbacks yet.

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。