Asp.net-mvc-routing

提供:Dev Guides
移動先:案内検索

ASP.NET MVC-ルーティング

ルーティングは、HTTP要求をコントローラーに送信するプロセスであり、この処理の機能はSystem.Web.Routingに実装されています。 このアセンブリはASP.NET MVCの一部ではありません。 実際にはASP.NETランタイムの一部であり、ASP.NETとともに.NET 3.5 SP1として公式にリリースされました。

*System.Web.Routing* はMVCフレームワークで使用されますが、ASP.NET Dynamic Dataでも使用されます。 MVCフレームワークはルーティングを活用して、リクエストをコントローラーに送信します。 Global.asaxファイルはアプリケーションの一部であり、アプリケーションのルートを定義します。

これは、前の章で作成したMVCアプリのGlobal.asaxのアプリケーション開始イベントのコードです。

using System;
using System.Collections.Generic;
using System.Linq;

using System.Web;
using System.Web.Mvc;
using System.Web.Routing;

namespace MVCFirstApp {
   public class MvcApplication : System.Web.HttpApplication {
      protected void Application_Start(){
         AreaRegistration.RegisterAllAreas();
         RouteConfig.RegisterRoutes(RouteTable.Routes);
      }
   }
}

以下は、1つのメソッドRegisterRoutesを含むRouteConfigクラスの実装です。

using System;
using System.Collections.Generic;
using System.Linq;

using System.Web;
using System.Web.Mvc;
using System.Web.Routing;

namespace MVCFirstApp {
   public class RouteConfig {
      public static void RegisterRoutes(RouteCollection routes){
         routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
         routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new{ controller = "Home", action = "Index", id = UrlParameter.Optional});
      }
   }
}

ルートを定義し、それらのルートはURLを特定のコントローラーアクションにマップします。 アクションは、コントローラー上の単なるメソッドです。 また、そのURLからパラメーターを選択し、パラメーターとしてメソッドに渡すこともできます。

したがって、アプリケーションで定義されているこのルートがデフォルトルートです。 上記のコードに見られるように、URLが(何か)/(何か)/(何か)の形式で到着した場合、最初の部分はコントローラー名、2番目の部分はアクション名、3番目の部分はIDパラメーター。

ルートを理解する

MVCアプリケーションは、URLをコントローラーとアクションにマップする方法を決定するASP.NETルーティングシステムを使用します。

Visual StudioがMVCプロジェクトを作成すると、いくつかのデフォルトルートが追加されて開始されます。 アプリケーションを実行すると、Visual Studioがブラウザーをポート63664にリダイレクトしていることがわかります。 Visual Studioはプロジェクトの作成時にランダムなポートを割り当てるため、ブラウザーが要求するURLにはほぼ確実に異なるポート番号が表示されます。

ローカルホストのホーム

最後の例では、HomeControllerを追加しているため、次のURLのいずれかをリクエストすることもできます。これらのURLは、HomeControllerのIndexアクションに送られます。

*http://localhost:63664/Home/*
*http://localhost:63664/Home/Index*

ブラウザがhttp://mysite/またはhttp://mysite/Homeをリクエストすると、HomeControllerのIndexメソッドから出力が返されます。

ブラウザでURLを変更して、これを試すこともできます。 この例では、ポートが異なる場合があることを除いて、http://localhost:63664/です。

/Homeまたは/Home/IndexをURLに追加して[Enter]ボタンを押すと、MVCアプリケーションから同じ結果が表示されます。

ローカルホストのホームインデックス

この例からわかるように、慣習では、HomeControllerというコントローラーがあり、このHomeControllerがMVCアプリケーションの開始点になります。

Visual Studioが新しいプロジェクト用に作成するデフォルトルートは、この規則に従うことを前提としています。 ただし、独自の規則に従う場合は、ルートを変更する必要があります。

カスタムコンベンション

もちろん、独自のルートを追加できます。 これらのアクション名が気に入らない場合、異なるIDパラメータがある場合、または一般的にサイトのURL構造が異なる場合は、独自のルートエントリを追加できます。

簡単な例を見てみましょう。 プロセスのリストを含むページがあると考えてください。 以下は、プロセスページにルーティングするコードです。

routes.MapRoute(
   "Process",
   "Process/{action}/{id}",
   defaults: new{
      controller = "Process", action = "List ", id = UrlParameter.Optional}
);

誰かが入ってProcess/Action/IdでURLを探すと、彼らはProcess Controllerに行きます。 デフォルトのアクションであるアクションを少し変えることができます。これをインデックスの代わりにリストにすることができます。

これで、到着するリクエストはlocalhosts/processのようになります。 ルーティングエンジンはこのルーティング構成を使用してそれを渡すため、Listのデフォルトアクションを使用します。

以下は、完全なクラス実装です。

using System;
using System.Collections.Generic;
using System.Linq;

using System.Web;
using System.Web.Mvc;
using System.Web.Routing;

namespace MVCFirstApp{
   public class RouteConfig{
      public static void RegisterRoutes(RouteCollection routes){
         routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

         routes.MapRoute(
            "Process", "Process/{action}/{id}",
            defaults: new{
               controller = " Process", action = "List ", id =
               UrlParameter.Optional});

         routes.MapRoute(
            name: "Default", url: "{controller}/{action}/{id}",
            defaults: new{
               controller = "Home", action = "Index", id =
               UrlParameter.Optional});
      }
   }
}

ステップ1 *-これを実行し、次のURL *http://localhost:63664/Process でプロセスページをリクエストします

ローカルホストプロセス

ルーティングエンジンが使用できないProcessControllerを探しているため、HTTP 404が表示されます。

  • ステップ2 *-ソリューションエクスプローラーで[コントローラー]フォルダーを右クリックし、[追加]→[コントローラー]を選択して、ProcessControllerを作成します。

ProcessControllerの作成

[足場の追加]ダイアログが表示されます。

ProcessController Scaffolding Dialog

  • ステップ3 *-MVC 5 Controller – Emptyオプションを選択し、「追加」ボタンをクリックします。

[コントローラーの追加]ダイアログが表示されます。

空のオプションの追加ボタン

  • ステップ4 *-名前をProcessControllerに設定し、[追加]ボタンをクリックします。

Controllersフォルダーに新しいC#ファイルProcessController.csが表示されます。このフォルダーはVisual Studioでも編集用に開かれています。

Set ProcessController

これでデフォルトのアクションはリストになりますので、ここではインデックスの代わりにリストアクションを使用します。

  • ステップ5 *-戻り値の型をActionResultから文字列に変更し、次のコードを使用してこのアクションメソッドから文字列を返します。
using System;
using System.Collections.Generic;
using System.Linq;

using System.Web;
using System.Web.Mvc;

namespace MVCFirstApp.Controllers{
   public class ProcessController : Controller{
     //GET: Process
      public string List(){
         return "This is Process page";
      }
   }
}
  • ステップ6 *-このアプリケーションを実行すると、デフォルトルートの結果が再び表示されます。 次のURL、http://localhost:63664/Process/Listを指定すると、ProcessControllerからの結果が表示されます。

ローカルホストプロセスリスト