MVCでルーティングテーブルroutesセットにRouteインスタンスを追加するいくつかの問題.

1559 ワード

昨日、routesコレクションにカスタムルーティングインスタンスを追加することについて質問した同級生がいました.
1.アプリケーションが機能するときにroutesテーブルにインスタンスを追加するため、GlobalクラスのRegisterRoutesメソッドにコードを書く必要があります.コードは次の2つの方法です.
routes.Add("s", new Route("a/b", new WebFormRouteHandler("~/WebForm1.aspx")));
routes.Add("a", new Route("c/b", new RouteValueDictionary { { "controller", "Default"}, { "Home", "Index"} }, new WebFormRouteHandler("~/WebForm1.aspx")));
ここで、aはルーティングの名前であり、Routeはルーティングのインスタンスであると同時に、仮想パスを処理し、実際のアドレスに指定する役割を果たすWebFormRouteHandlerのカスタムクラスが使用される.具体的なコードは以下の通りである.
public class WebFormRouteHandler : MvcRouteHandler
  • {

  • private string VirtualPath;
  • public WebFormRouteHandler(string path)

  • {
  • VirtualPath = path;

  • }

  • protected override IHttpHandler GetHttpHandler(RequestContext requestContext)
  • {

  • var page = BuildManager.CreateInstanceFromVirtualPath(VirtualPath, typeof(Page)) as IHttpHandler;

  • return page;
  • }

  • }
    彼女の問題は、上記の最初の方法では、RedirectToAction()の操作をすると、WebForm 1に直接ジャンプします.aspxページは、2つ目の方法を使用する場合、通常、c/bにアクセスする場合にのみアクセスされます.
    上記の2つのコードを比較すると、実際には2つ目の方法はRouteValueDictionaryクラスに関するインスタンスが1つ増えただけで、マイクロソフトの公式はこのインスタンスを以下のように定義しています.
    大文字と小文字を区別しないキー/値ペアのセットを表します.このセットは、ルーティング・フレームワーク内の異なる場所(たとえば、ルーティングのデフォルト値を定義する場合や、ルーティング・ベースのURLを生成する場合)で使用できます.
    実はこのオブジェクトの作成は、url、すなわちc/bのデフォルトのアクセスルールを定義することができ、urlは必ずこのルールに従って指定されたページにアクセスします.