コンテンツにスキップ
メインメニュー
メインメニュー
サイドバーに移動
非表示
案内
メインページ
最近の更新
未作成ページ
おまかせ表示
ヘルプ
MonoBook
検索
検索
ログイン
個人用ツール
ログイン
ログアウトした編集者のページ
もっと詳しく
投稿記録
トーク
「
ASP.NET MVC/ルーティング
」を編集中 (節単位)
ページ
議論
日本語
閲覧
編集
ソースを編集
履歴表示
ツール
ツール
サイドバーに移動
非表示
操作
閲覧
編集
ソースを編集
履歴表示
全般
リンク元
関連ページの更新状況
特別ページ
ページ情報
警告:
ログインしていません。編集を行うと、あなたの IP アドレスが公開されます。
ログイン
または
アカウントを作成
すれば、あなたの編集はその利用者名とともに表示されるほか、その他の利点もあります。
スパム攻撃防止用のチェックです。 けっして、ここには、値の入力は
しない
でください!
== ルーティング設定 == ルーティング設定についてはASP.NET MVCアプリが格納されているディレクトリの「Global.asax」に記載されている。 Global.asaxの主要部分(Visual Studio 2010で自動生成した場合のデフォルト設定) <source lang="csharp"> routes.MapRoute( // ルート名 "Default", // パラメーター付きの URL "{controller}/{action}/{id}", // パラメーターの既定値 new { controller = "Home", action = "Index", id = UrlParameter.Optional } ); </source> 第1引数は基本的に何でもよいそうだ。あとから誰がみても意味の伝わるわかりやすいルーティング名前を書いておく。 重要なのは第2引数。URLをスラッシュ区切りでコントローラー名、アクション名、パラメーターの3つに分解するように設定している。 第3引数はコントローラー名、アクション名、パラメーターのそれぞれが省略された場合に設定されるデフォルト値を設定している。 この例では省略しているが第4引数以降もある。 色々あるのでググれ。 === URLから引数を取得する === ASP.NET MVCではルーティング定義に従い、URL文字列からアクションに渡す引数を自動抽出してくれる。 たとえば下記のルーティング定義では、「 http://localhost/watch/abc 」というURLにアクセスすると、VideoContorollerクラスのWatchメソッドが呼ばれ、videoName引数に「abc」という文字列が格納されている。 <source lang="csharp"> routes.MapRoute( "Video", "watch/{videoName}", // ← これ超重要。 new { controller = "Video", action = "Watch" } ); </source> 上記の{videoName}の部分に入っている文字列を取得するには、Watchメソッドに同名の引数を用意しておくと自動的に渡される。 <source lang="csharp"> class VideoController : Controller { public ActionResult Watch( string videoName // ←←←←← この変数名をあわせる ) { return new ContentResult() { ContentType = "text/plain", Content = "Video : Watch : " + videoName }; } } </source> === スラッシュを含む文字列の取得 === ASP.NET MVCのルーティング定義で自動抽出される個々の引数には、基本的に半角スラッシュ「/」を含めることができない。URLエンコードしても無駄な抵抗。たとえば前述の例で「 「 http://localhost/watch/abc/123 」にアクセスすると404エラーとなる。 ただし、ルーティング定義の最後の変数名の頭に半角アスタリスク「*」を付けると、以降すべてが抽出される。これには半角スラッシュも含まれるので、半角スラッシュを含みたい引数は最後にもってくると良い。また、常に1個の引数だけとるようにしてアクションメソッド内で強引にパースするという荒技もある。 前述の例を以下のように修正するとvideoName変数にちゃんと「abc/123」という文字列が渡されると思う。 <source lang="csharp"> routes.MapRoute( "Video", "watch/{*videoName}", // ← 頭にアスタリスク // これでURL文字列のwatch/以降の全部が // videoName変数に格納されるようになる new { controller = "Video", action = "Watch" } ); </source> すごいぜ[[stackoverflow.com]]<ref>http://stackoverflow.com/questions/591694/url-encoded-slash-in-url</ref>。
編集内容の要約:
MonoBookへの投稿はすべて、他の投稿者によって編集、変更、除去される場合があります。 自分が書いたものが他の人に容赦なく編集されるのを望まない場合は、ここに投稿しないでください。
また、投稿するのは、自分で書いたものか、パブリック ドメインまたはそれに類するフリーな資料からの複製であることを約束してください(詳細は
MonoBook:著作権
を参照)。
著作権保護されている作品は、許諾なしに投稿しないでください!
このページを編集するには、下記の確認用の質問に回答してください (
詳細
):
1たす1は?(全角で入力してください)
キャンセル
編集の仕方
(新しいウィンドウで開きます)
このページは 1 個の隠しカテゴリに属しています:
カテゴリ:スタブ
本文の横幅制限を有効化/無効化