ASP.NET Web ページ (Razor) サイトでわかりやすい URL を作成する

作成者: Tom FitzMacken

この記事では、ASP.NET Web ページ (Razor) Web サイトでのルーティングと、これによって読みやすく SEO に優れた URL を使用する方法について説明します。

ここでは、次の内容について学習します。

  • ASP.NET でルーティングを使用し、より読みやすく検索しやすい URL を使用できるようにする方法。

チュートリアルで使用するソフトウェアのバージョン

  • ASP.NET Web ページ (Razor) 3

このチュートリアルは、ASP.NET Web ページ 2 にも適用できます。

ルーティングの概要

サイト内のページの URL は、サイトの動作に影響を与える可能性があります。 "わかりやすい" URL にすると、ユーザーがサイトを簡単に使用できるようになります。 また、サイトの検索エンジンの最適化 (SEO) にも役立ちます。 ASP.NET Web サイトには、わかりやすい URL を自動的に使用する機能が含まれています。

ASP.NET を使うと、サーバー上のファイルを指すだけでなく、ユーザーのアクションを表す意味のある URL を作成できます。 架空のブログの次の URL を考えてみましょう。

  • http://www.contoso.com/Blog/blog.cshtml?categories=hardware
  • http://www.contoso.com//Blog/blog.cshtml?startdate=2009-11-01&enddate=2009-11-30

これらの URL を次の URL と比べてみてください。

  • http://www.contoso.com/Blog/categories/hardware/
  • http://www.contoso.com/Blog/2009/November

最初のペアでは、ユーザーは blog.cshtml ページを使用してブログが表示されることを理解している必要があります。さらに、適切なカテゴリまたは日付範囲を取得するクエリ文字列を作成する必要があります。 2 セット目の例は、理解するのも作成するのもはるかに簡単です。

最初の例の URL は、特定のファイル (blog.cshtml) を直接指しています。 何らかの理由でブログがサーバー上の別のフォルダーに移動された場合、またはブログが別のページを使用するように書き換えられた場合、リンクは間違いになります。 2 セット目の URL は特定のページを指していないため、ブログの実装や場所が変わった場合でも、URL は引き続き有効です。

ASP.NET Web ページでは、ASP.NET が "ルーティング" を使用するため、上記の例のようなわかりやすい URL を作成できます。 ルーティングにより、URL から要求を満たすことができる 1 ページ (または複数のページ) への論理マッピングが作成されます。 マッピングは (特定のファイルへの物理的ではなく) 論理的であるため、ルーティングにより、サイトの URL を定義する方法が非常に柔軟になります。

ルーティングのしくみ

ASP.NET は要求の処理時に URL を読み取り、ルーティング方法を決定します。 ASP.NET は、URL の個々のセグメントを左から右に進み、ディスク上のファイルとの照合を試みます。 一致するものがあった場合、URL の残っているものすべてが "パス情報" としてページに渡されます。

たとえば、誰かが次の URL を使用して要求したとします。

http://www.contoso.com/a/b/c

検索は次のようになります。

  1. /a/b/c.cshtml というパスと名前のファイルはありますか。 ある場合は、そのページを実行し、情報を何も渡しません。 それ以外の場合:
  2. /a/b.cshtml というパスと名前のファイルはありますか。 ある場合は、そのページを実行し、値 c を渡します。 Otherwise
  3. /a.cshtml というパスと名前のファイルはありますか。 ある場合は、そのページを実行し、値 b/c を渡します。

検索で、指定したフォルダー内に .cshtml ファイルの完全一致が見つからなかった場合、ASP.NET はこれらのファイルを順番に検索し続けます。

  1. /a/b/c/default.cshtml (パス情報なし)。
  2. /a/b/c/index.cshtml (パス情報なし)。

Note

わかりやすく説明すると、特定のページに対する要求 (つまり、ファイル名拡張子に .cshtml が含まれる要求) は期待どおりに機能します。 http://www.contoso.com/a/b.cshtml のような要求により、ページ b.cshtml を問題なく実行できます。

ページ内では、ページの UrlData プロパティ (ディクショナリ) を介してパス情報を取得できます。 ViewCustomers.cshtml というファイルがあり、サイトが次の要求を受け取ったとします。

http://mysite.com/myWebSite/ViewCustomers/1000

上の規則で説明したように、この要求がページに送信されます。 ページ内で、次のようなコードを使用して、パス情報 (この場合は値 "1000") を取得して表示できます。

<!DOCTYPE html>
<html>
    <head>
        <title>URLData</title>
    </head>
    <body>
      Customer ID: @UrlData[0].ToString()
    </body>
</html>

Note

ルーティングには完全なファイル名が含まれていないため、名前は同じでもファイル名拡張子が異なるページがある場合です (たとえば、MyPage.cshtmlMyPage.html)。 ルーティングに関する問題を回避するには、拡張子だけが異なる名前のページがサイト内に存在しないようにすることをお勧めします。

その他のリソース

WebMatrix - SEO のための URL、UrlData、ルーティング。 Mike Brind によるこのブログ エントリでは、ASP.NET Web ページでのルーティングのしくみについてさらに詳しく説明しています。