2

私がやろうとしているのは、アプリケーションの動的ルーティングです。

たとえば、Application_BeginRequest()で、現在のコントローラーを取得し、それが存在するかどうかを確認します。そうでない場合は、デフォルトのルーティングをオーバーライドする一連のルートを追加して、URLが次のようになるようにします。

データベースからのmysite.com/term

ただし、「データベースからの用語」が有効なコントローラーである場合は、デフォルトのルーティングを使用する必要があります

routes.MapRoute(
            "Default",                                              // Route name
            "{controller}/{action}/{id}",                           // URL with parameters
            new { controller = "Home", action = "Index", id = "" }  // Parameter defaults
        );

私はすでに自分のルートを思い通りに持っています。ここで、現在のコントローラーを取得して、それが存在するかどうかを判断する必要があります。カスタムルートを追加しないと、次のエラーが発生します。

IControllerFactory'MySite.Web.UnityControllerFactory'は、'データベースからのterm'という名前のコントローラーのコントローラーを返しませんでした。

コントローラーが存在するかどうかを判断するためにグローバルからのユニティを使用する方法はありますか?

ありがとう!

4

2 に答える 2

3

データベースからルートを登録し、コントローラールートをglobal.asaxに適用するユーティリティヘルパークラスを作成してみませんか?

DBルートが最初に登録されるため、有効なルートが見つかった場合は、最初にそのルートを使用します。または、その逆に設定することもできます。補足として、競合を避けるために、DBからのルートにRouteNameが関連付けられていることを確認します。

パブリッククラスグローバル:HttpApplication
{{
    public static void RegisterRoutes(RouteCollectionroots)
    {{
        //ユーティリティを呼び出してdbからのルートを登録します
        RouteHelper.RegisterRoutesFromDB(routes);

        //標準ルートを定義します
        ルート.MapRoute(
            "デフォルト"、
            "{controller} / {action} / {id}"、
            new {controller = "Home"、action = "Index"、id = ""}
        );

        ..。
于 2009-05-29T14:03:42.397 に答える
0

私のブログには、解決策があります。これを使用して、次のように各ルートの代替ルートを定義できます。

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

        var route = routes.MapRoute(
            name: "Dynamic",
            url: "{name}",
            defaults: new { controller = "Dynamic", action = "Index" });
        
        defaultRoute.AlternativeRoute = route;
于 2013-08-08T05:10:36.537 に答える