Rainbow Engine

IT技術を分かりやすく簡潔にまとめることによる学習の効率化、また日常の気付きを記録に残すことを目指します。

ASP.NET C#

ASP.NET MVCのルーティングの基本

投稿日:2021年5月7日 更新日:

<目次>

(1) ASP.NET MVCのルーティングの基本
 (1-1) 構文
 (1-2) サンプルプログラム
  ・RouteConfig.cs
  ・Controller
  ・View
 (1-3) 補足:要求されたURLがパターンにマッチしない場合

(1) ASP.NET MVCのルーティングの基本

ルーティングというのはブラウザ(クライアント)から来るリクエストを、適切なMVCのControllerアクションに振り分け、レスポンスを返す役割を果たします。

ルーティングの設定は「/App_Start」配下の「RoutingConfig.cs」というC#のモジュールに設定されています。

(1-1) 構文

以下はデフォルトで用意されているルーティング用のメソッドです。

●構文(ルーティング全体)

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

 

●構文説明

・RegisterRoutes()メソッド
 
MVCのアプリケーションが最初に処理開始する際に、まず最初に「Global.asax.cs」の「Application_Start()」メソッドが呼び出され、そこからRouteConfig.csのRegisterRoutes()メソッドが呼び出されます。
 
(図111)
 
 
・MapRoute()メソッド
 
そしてRegisterRoutes()メソッド内で「MapRoute()」メソッドを呼び出す事によって「ルートテーブル」を生成します。
 
(構文)MapRoute
Route MapRoute(string name, string url, Object defaults)
 
引数の意味は次の通りです。
(表)
name ルートを一意に識別するための名前です。デフォルトのルートは「Default」という名前になっています。
(例)
name: “Default”
url リクエストURLとのマッチングを行うためのURLパターンを指定します。
(例)
url: “{controller}/{action}/{id}”
default 上記の{controller}、{action}、{id}といったパラメータにデフォルト値を、匿名のプロパティを使ってセットします。
(例)
defaults: new { controller = “Home”, action = “Index”, id = UrlParameter.Optional }
デフォルトのルートテーブルは「Default」という名前のルートが1つだけ定義されています。そしてURL(url: “{controller}/{action}/{id}”)の各セグメントは次のように割り当てられています。
 
(表1)
  プレースホルダ― 紐づける値
第1セグメント {controller} コントローラー名を割り当て(例:Home)
第2セグメント {action} コントローラーのアクションに割り当て(例:Index)
第3セグメント {id} 任意のユーザーパラメータを割り当て
なので、例えば下図のように「https://localhost:44313/Home/Index/1」のようなURLをリクエストした場合は、デフォルトルート(Default)によってURLを次のようにマッピングします。
 
controller:Home
action:Index
id:1
 
(図112)

 

そして内部的には、次のメソッドが実行されます。
HomeController.Index(1)

 

(図113)

目次にもどる

(1-2) サンプルプログラム

簡単なASP.NET MVCのアプリケーションを例に使って、ルーティングのイメージを掴んでいけたらと思います。

構造としてはシンプルで「HomeController.cs」というコントローラーと、「Index.cshtml」というビューがあります。そして、クライアントからリクエストを受けたのちRouteConfig.cs(▲1)からController(▲2)へのルーティングを行い、そこからView(▲3)が描画される流れをイメージするために、▲1~▲3のサンプルプログラムを掲載します。
 
(構造)
App_Start
 ∟RouteConfig.cs
Controller
 ∟HomeController.cs
Views
 ∟Home
  ∟Index.cshtml
Global.asax

(図121)

・RouteConfig.cs

RouteConfig.csのサンプルです。先ほどご紹介した構文をベースにしています。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;

namespace MVCTest
{
  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 }
      );
    }
  }
}

 

目次にもどる

・Controller

Controllerのサンプルは以下になりますが、概要については別記事「ASP.NETのMVCとは?」にてご紹介しています。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace MVCTest.Controllers
{
    public class HomeController : Controller
    {
        // GET: Home
        public ActionResult Index()
        {
            return View();
        }
    }
}

 

目次にもどる

・View

Viewについても、概要は別記事「ASP.NETのMVCとは?」にてご紹介しています。

@{
    Layout = null;
}

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title></title>
</head>
<body>
    <div>
 HelloWorld
    </div>
</body>
</html>

 

(図122)

目次にもどる

(1-3) 補足:要求されたURLがパターンにマッチしない場合

要求URLが「url:」の{controller}、{action}、{id}のいずれも含まない場合は、defaultsのURLに送られます。

もしcontollerの指定のみなら、メソッドはdefaultのactionで指定したものが使用されます。

逆にactionの指定のみなら、Contollerはdefaultのcontrollerで指定したものが使用されます。

(図131)

目次にもどる

Adsense審査用広告コード


Adsense審査用広告コード


-ASP.NET, C#

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

C#のスレッド(Thread)とは?概要やサンプルプログラムをご紹介

  <目次> (1) C#のスレッド(Thread)とは?概要やサンプルプログラムをご紹介  (1-1) 概要   (1-1-1) スレッドのライフライクルについて   (1-1-2) ma …

Entity Frameworkのコードファーストとデータベースファーストの特徴や違いについて

  <目次> (1) Entity Frameworkのコードファーストとデータベースファーストの特徴や違いについて  (1-1) データベースファースト  (1-2) コードファースト   …

ASP.NET MVCでURLのパラメータを取得する仕組み

  <目次> (1) ASP.NET MVCでURLのパラメータを取得する仕組み  (1-1) 前提知識:URLにパラメータを埋め込む方法  (1-2) URLのパラメータ取得方法  (1- …

.NETで「SystemInvalidOperationException」例外(ZombieCheck、Rollback)の調査記録

<目次> (1) .NETで「SystemInvalidOperationException」例外(ZombieCheck、Rollback)の調査記録  (1-1) エラーメッセージ  (1-2) …

C#のIComparableの実装方法+IComparerとの違いについて

<目次> (1) C#のIComparableの実装方法+IComparerとの違いについて  (1-1) IComparableの概要とIComparableとの違い  (1-2) STEP0:比較 …

  • English (United States)
  • 日本語
Top